我有 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與當前客戶端相關的所有內容。那行得通,我可以使用這個函數來顯示交易者列表,但它會產生額外的查詢和額外的代碼。
- 1 回答
- 0 關注
- 197 瀏覽
添加回答
舉報
0/150
提交
取消