Yii1多个连接到同一个表

时间:2015-11-18 14:36:47

标签: php yii

我的门票模型中有以下关系:

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

但问题仍然存在。我试过设置上面的一个和两个在一起。我可以在我的情况下确认没有提到问题字段,我已完全删除所有其他条件以确保这不是问题。

有没有人对如何进行有任何建议?

注意

我已经包含了我自己的答案,因为情况可能对我来说是独一无二的,但可能对其他人有帮助。

2 个答案:

答案 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');  

另请查看文档:

http://www.yiiframework.com/doc/guide/1.1/it/database.arr

答案 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的条件下提交了名称。通过在条件中为它们添加前缀,这解决了问题。