【问题标题】:How to sort and search in a CGridView column with a two-level 1-N relation?如何在具有两级 1-N 关系的 CGridView 列中进行排序和搜索?
【发布时间】:2017-01-12 10:52:22
【问题描述】:

这个问题直接关注this other

我有这些表:组、用户、报告

关系: 组 1 -> N 个用户 ** 和 ** 用户 1 -> N 个报告

我已经有了这种关系在报告模型中:

'user' => array(self::BELONGS_TO, 'Users', 'userId'),

这在用户模型中

'group' => array(self::BELONGS_TO, 'Gruppi', 'groupId'),

在报告模型中我有这个:

$criteria=new CDbCriteria;
$criteria->with = array ('user');

在报告的管理视图中,我使用的是CGridView

我使用 user.group.name 来显示组名,但是如何搜索(通过 DropDown)和排序!?

【问题讨论】:

  • 对此,请检查:yiiframework.com/wiki/281/…
  • 看我的回答,我已经扩展了 wiki 解决方案,添加了用于搜索的组合,并扩展了解决方案以涵盖两级关系问题...
  • 好的,很好,接受你自己的答案也没关系。
  • 谢谢,我正在等待确认我的答案是有效的和“良好的代码实践”。 (我必须等一天,我会做到的)

标签: yii yii-relations


【解决方案1】:

在管理员视图中,我使用的是 user.group.name,而不是

array (
        'name' => 'groupId',
        'value' => '$data->user->group->name',
        'filter' => Chtml::listData( Groups::model()->findAll() ,'id','name')
    ),

在报告模型中我添加了一个类字段

public $groupId;

在报告规则中

    array('groupId','safe','on'=>'search'),

在报告搜索中

....
$criteria->with = array ('user.group');
....
$criteria->compare('user.groupId',$this->groupId);
....
[in sort array]
'groupId'=>array(
            'asc' =>'group.name',
                'desc'=>'group.name DESC',
 ),

通过这种方式,我可以按组名进行搜索和排序!

我希望这篇文章对某人有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2021-09-16
    • 2012-08-17
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    相关资源
    最近更新 更多