Yii 1 — Порядок по полю отношения не работает

Я знаю, что это общий вопрос, но я получаю конкретную ошибку о неприсоединенной таблице.

Моя основная модель (группа) имеет такое соотношение (1: 1):

return array(
'groupType'=>array(self::BELONGS_TO, 'GroupType', 'groupTypeId','order'=>'name ASC');

Как вы можете видеть, я попытался установить атрибуты порядка, которые не работают.

Как вы можете себе представить, мой другой модуль, GroupType, имеет атрибут name.

В виде сетки модель отношения печатается хорошо, просто используя имя отношения:

array(
'name'=>'groupType',
'value'=>'$data->groupType->name'
),

Автозагрузка работает нормально в GridView.

К сожалению, столбец не сортируется. Поэтому я поместил параметр CSort в DataProvider, предоставленный в методе поиска, как показано ниже:

$sort = new CSort();
$sort->defaultOrder = 'id asc';
$sort->attributes = array(
'groupType'=>array(
'asc'=>'groupType.name asc',
'desc'=>'groupType.name desc'
),
'description'=>array(
'asc'=>'t.description asc',
'desc'=>'t.description desc'
),
'name'=>array(
'asc'=>'t.name asc',
'desc'=>'t.name desc'
),
'*');

return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>$sort
));

Упорядочивание по описанию и названию (атрибут группы) работает нормально. Когда я пытался заказать по groupType, я получаю это просто ошибка:

SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'groupType.id' in 'order clause'. The SQL statement executed was: SELECT * FROM `cprol_groups` `t` ORDER BY groupType.idname asc LIMIT 20

Как вы можете видеть, фреймворк не присоединяется к моей связанной таблице. И в этом случае, какой псевдоним я должен использовать из-за того же имени свойства?

Спасибо за любой совет!

0

Решение

Я решил форсировать соединение.

В критериях я вынужден присоединиться:

$criteria->join = 'join '.GroupType::model()->tableName().' gt on gt.id = t.groupTypeId';

или используя оператор -> with:

$criteria->with = 'groupType';

удаление порядка по умолчанию в отношении и добавление псевдонима:

return array('groupType'=>array(self::BELONGS_TO, 'GroupType', 'groupTypeId','alias'=>'gt'));

так что вы можете заказать по полю отношения:

$sort = new CSort();
$sort->defaultOrder = 'gt.name asc';
$sort->attributes = array(
'groupTypeId'=>array(
'asc'=>'gt.name asc',
'desc'=>'gt.name desc'
),
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector