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'
),

自动加载在网格视图中工作正常。

不幸的是,该列不可排序。因此,我将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'
                                ),

最新更新