Yii1 search() 按多对多关系只返回一个相关模型

我有 3 个表: clients,traders和client_trader_relation


客户可以有很多交易者,交易者也可以有很多客户,所以这是一个“数据透视”表的多对多关系。该关系在客户端模型中定义如下:


$relations = array(

        'traders' => array(self::MANY_MANY, 'traders', 'client_trader_relation(client_id, trader_id)'),

);

现在,当在 CGridView 中显示所有客户的列表时,一切正常,但我也希望能够通过特定交易者搜索客户(因此,如果交易者之一是 id 10,则返回该客户)。


我在模型的 search() 函数中这样做了:


public function search()

{

    $criteria=new CDbCriteria;


    $criteria->with = 'traders';

    $criteria->together = true;

    $criteria->compare('traders.id', $this->search_trader);

}

search_trader是添加到模型和规则中的附加变量,因此它可以用于搜索。虽然这有效,但它成功返回了指定交易者的所有客户,结果不包含任何其他相关交易者,仅包含我正在搜索的交易者。我可以理解这种行为,因为这是生成的 SQL 的工作方式。


我很好奇是否有任何方法可以从此类搜索中返回所有交易者而无需进行任何其他查询/功能?如果没有,那么做这种事情的正确方法是什么?至于现在,我只能想到模型中的某些功能,例如getAllTraders()手动查询traders与当前客户端相关的所有内容。那行得通,我可以使用这个函数来显示交易者列表,但它会产生额外的查询和额外的代码。


慕容708150
浏览 187回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP