2015-04-27 3 views
0
  1. стол Книги
  2. стол Авторы
  3. стол Authors_Category

В Books модели имеют соотношение:Yii модели отношений присоединиться

public function relations() 
    { 
     return array(
      'authors' => array(self::BELONGS_TO, 'Authors', array('author_id'=>'id')), 
    } 

В Authors:

public function relations() 
    { 
     return array(
      'authors_category' => array(self::BELONGS_TO, 'Authors_Category', array('author_cat'=>'id')), 
    } 

В BooksDataGridView я могу получить доступ Authors_Category поля

$data->authors->authors_category->category_name

Но проблема заключается в сортировке Authors_Category colums

В Books модели я сортировочные правило:

return new CActiveDataProvider(
     new FraudAlerts(), 
     array(
      'criteria'=>$criteria, 
      'sort'=>array(
       'attributes'=>array(
        'category_name'=>array(
         'asc'=>'Authors_Category.category_name', 
         'desc'=>'Authors_Category.category_name DESC', 
        ), 
       ) 
      ) 
     ) 
    ); 

Когда я пытаюсь сортировать по Authors_Category fiels Я получаю ошибку, что col category_name не существует.

Что не так в моих отношениях: Books модель?

+1

В вашей модели в методе поиска вы должны определить с помощью критериев $ criteria-> with = array ('authors_category'); –

ответ

2

Как указал Ятин Мисти, вам необходимо eager loadauthors_category для этого.

Yii позволяет загружать вложенные отношения с помощью with так это может быть выполнено следующим образом:

$criteria->with = array(
    'authors.authors_category' => array('select' => array('category_name', 'id')) 
); 

select ограничивает поля, загруженные с помощью запроса для повышения производительности. Если вы хотите загрузить все поля из Authors_Category, просто удалите его.

Смежные вопросы