我的门票模型中有以下关系:
'rl_status_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('status_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "status_id"');
'rl_category_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('category_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "category_id"');
我正在尝试显示一个Cgridview,它具有类别和状态的可排序列。
我使用以下内容加入表:
$criteria->with = array('rl_category_id','rl_status_id');
我也在使用以下CSort:
$sort = new CSort();
$sort->attributes = array(
Yii::t('app','model.tickets.category_id')=>array(
'asc'=>'rl_category_id.related_value',
'desc'=>'rl_category_id.related_value desc',
),
Yii::t('app','model.tickets.status_id')=>array(
'asc'=>'rl_status_id.related_value',
'desc'=>'rl_status_id.related_value desc',
),
当访问该页面时,我收到一个错误,即related_fields
表中的字段是不明确的,大概是因为它有效地连接了两次。
在故障单表中,状态即数字,但是,我希望按相关字段表中的文本对列进行排序,即Open
,而不是故障单列中的数值。
只使用Csort
中的一个和With
网格排序按预期工作。但是在同一张桌子中加入一秒会导致休息。
我发现很少,但我知道你可以为关系添加别名,也可以添加别名。因此我尝试了以下内容:
$criteria->with = array('rl_category_id'=>array('alias'=>'rl_category_id'),'rl_status_id'=>array('alias'=>'rl_status_id'));
'rl_status_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('status_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "status_id"','alias'=>'rl_status_id');
'rl_category_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('category_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "category_id"','alias'=>'rl_category_id');
但问题仍然存在。我试过设置上面的一个和两个在一起。我可以在我的情况下确认没有提到问题字段,我已完全删除所有其他条件以确保这不是问题。
有没有人对如何进行有任何建议?
注意
我已经包含了我自己的答案,因为情况可能对我来说是独一无二的,但可能对其他人有帮助。
答案 0 :(得分:1)
您可以使用表的别名来消除歧义(数组的最后一个元素):
'rl_status_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('status_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "status_id"', 'alias' => 'rlStatusId');
'rl_category_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('category_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "category_id"', 'alias' => 'rlCategoryId');
另请查看文档:
答案 1 :(得分:0)
我设法找到问题并确认别名确实按预期工作。我的问题实际上是关系,而不是criteria
的{{1}}。
建立我需要改变的关系时:
dataprovider
到
'rl_category_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('category_id'=>'related_id'),'condition'=>'model = "Tickets" AND field = "category_id"','alias'=>'rl_category_id');
主要区别在于我在关系本身'rl_category_id'=>array(self::BELONGS_TO, 'RelatedFields', '', 'foreignKey' => array('category_id'=>'related_id'),'condition'=>'rl_category_id.model = "Tickets" AND rl_category_id.field = "category_id"','alias'=>'rl_category_id');
和model
的条件下提交了名称。通过在条件中为它们添加前缀,这解决了问题。