defaultScope中的Yii1多对多关系条件与search()比较冲突

时间:2019-05-08 11:22:18

标签: php yii orm yii1.x

我有3张桌子: clientsclients_traders_relationtraders

这是一个多对多的关系,客户可以有很多交易者,而交易者可以有很多客户。

clients模型中,我有2个关系:

'traderssearch' => array(self::MANY_MANY, 'traders', 'clients_traders_relation(relation_id, trader_id)'),
'traders' => array(self::MANY_MANY, 'traders', 'clients_traders_relation(relation_id, trader_id)'),

traderssearch关系用于限制对不属于当前交易者的客户的访问(因此交易者只能看到他们的客户,或者如果他们是交易者之一) 。 traders关系用于获取所有交易者(这是我从另一个问题中获得的解决方案,因为即使有更多交易,一个关系也只会返回当前交易者。

它在defaultScope中的用法如下:

return array(
    'alias' => $class,
    'with' => array(
        'traderssearch' => array(
        'together' => true,
        'condition' => 'traderssearch.id='. Yii::app()->user->getId()),
    'traders',
),

但是,我希望能够搜索其他交易者的客户。 假设我有3个客户:

  1. 客户A,交易员:我,XYZ
  2. 客户B,交易员:我
  3. 客户C,交易员:XYZ

我要搜索XYZ客户。它应该只返回客户A,因为那是与我和XYZ相关的唯一客户。

我在search()中做到了这一点:

$criteria->with = 'traderssearch';
$criteria->together = true;
$criteria->compare('traderssearch.id', $this->search_trader);

search_trader是添加到模型的附加变量,因此可以用于搜索。 如果我不使用搜索显示客户列表,就可以了。但是,如果我尝试搜索XYZ客户,则不会返回任何内容。我认为这是因为这两个条件都将自身排除在外,诸如id = 10 AND id = 20之类的东西永远不会成立。 我尝试将OR添加到compare(),但是没有用。

如果我从defaultScope中删除条件,则搜索有效,因为现在只有一个条件可以搜索交易者ID。 有什么办法可以同时保留defaultScope和搜索条件?我需要另一个第三种关系吗?

0 个答案:

没有答案