[英]Yii 1 - Ordering by relation field not working
我知道它是一個常見的問題,但我得到一個關於未連接表的特定錯誤。
我的主要模型(組)有這種關系(1:1):
return array(
'groupType'=>array(self::BELONGS_TO, 'GroupType', 'groupTypeId','order'=>'name ASC');
正如您所看到的,我試圖將訂單屬性設置為無效。
你可以想象,我的另一個模塊GroupType有一個名為'name'的屬性。
在網格視圖中,只需使用關系名稱即可很好地打印關系模型:
array(
'name'=>'groupType',
'value'=>'$data->groupType->name'
),
Autoload在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
));
按描述和名稱(Group的屬性)排序工作正常。 當我嘗試通過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
如您所見,框架未加入我的相關表。 在這種情況下,由於相同的屬性名稱,我必須使用什么Alias?
謝謝你的任何建議!
我已經決定強迫加入。
在標准中,我必須強制加入:
$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'
),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.