我知道这是一个常见问题,但我收到有关未连接表的特定错误。
我的主要模型(组)具有以下关系(1:1):
return array(
'groupType'=>array(self::BELONGS_TO, 'GroupType', 'groupTypeId','order'=>'name ASC');
如您所见,我尝试放置一个不起作用的订单属性。
正如你可以想象的那样,我的另一个模块GroupType有一个名为"name"的属性。
在网格视图中,只需使用关系名称即可很好地打印关系模型:
array(
'name'=>'groupType',
'value'=>'$data->groupType->name'
),
自动加载在网格视图中工作正常。
不幸的是,该列不可排序。因此,我将CSort参数放入搜索方法中提供的数据提供程序,如下所示:
$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
如您所见,框架没有加入我的相关表。在这种情况下,由于相同的属性名称,我必须使用什么别名?
感谢您的任何建议!
我已经解决了强制连接的问题。
在标准中,我必须强制加入:
$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'
),