我有3张桌子:
clients
,clients_traders_relation
,traders
这是一个多对多的关系,客户可以有很多交易者,而交易者可以有很多客户。
在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个客户:
我要搜索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和搜索条件?我需要另一个第三种关系吗?