我知道这是一个常见的问题,但我收到了一个关于未加入表格的特定错误。
我的主要模特(组)有这种关系(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
));
按说明和名称排序(组的属性)工作正常。当我尝试按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?
感谢您的任何建议!
答案 0 :(得分: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'
),