2009-06-18 83 views
0

在CakePHP中,我有兩個表,國家&網絡。他們有一個HABTM關係,並加入了countries_networks。從CakePHP中關聯表字段名='x'的表中選擇PHP

我想從國家表中的所有國家,在網絡=「O2」的「名稱」字段

我已經意識到我不能做到這一點使用一個基本的發現(),所以我一直在試驗可控制的行爲。我已設法限制返回的數據,但看起來好像'可容納'並不完全符合我的要求。我的繼承人代碼:

$countries = $this->Country->find('all', array('contain' => array(
           'Network' => array(
           'conditions' => array('Network.name =' => "o2"), 
    ) 
    ))); 

該查詢返回但是所有國家和Network.name如果它的「O2」。我真正需要做的是僅返回具有'o2'的Network.name的國家,而不是其他國家。

任何人都可以幫忙嗎?謝謝。

回答

1

您的查詢完全返回您的問題。 嘗試從網絡中選擇。

$countries = $this->Country->Network->find('first', array(
    'conditions' => array('Network.name' => "o2"), 
    'contain' => array('Country') 
)); 

$countries = $countries['Country']; 
+0

解決 - 在這樣的事情蛋糕吹燈:自定義查詢時間:)選擇國家名稱 \t \t各國爲C \t \t INNER JOIN countries_networks AS n ON c.id = n.country_id \t \t AND n.network_id = 1 – 2009-06-19 10:55:14

2

「='=>」 這是什麼?有沒有需要「Network.name」後使用「=」符號

+0

是的,但它旁邊的點,因爲它對我的問題沒有任何區別。 – 2009-06-18 16:01:58

1

你應該能夠做這樣的事情:

$this->Country->hasAndBelongsToMany['Network']['conditions'] = array('Network.name'=>'o2'); 
$myCountries = $this->Country->find('all'); 

我沒有測試過這一點,但它應該讓你漂亮靠近你需要的地方。另外,請記住,像這樣更改hasAndBelongsToMany數組將會影響當前頁面加載期間針對該模型的所有後續查詢(但在下次實例化模型時會重置該數組)。

+0

感謝inkedmn,但是這給出了與使用contains方法相同的結果。它的行爲像一個LEFT JOIN,並返回所有國家,如果它的'o2'則返回network.name。 http://pastebin.com/d588c9df0 我只需要返回符合該條件的國家/地區。 – 2009-06-19 10:08:58

1

我在出門的路上,很抱歉給出了簡要的解釋。

我想你想要的是一個HABTM關係,但是能夠根據關聯模型的數據進行過濾。要做到這一點,請查看Cake手冊中的「Containable」行爲。很確定這就是你想要的。

+0

我一直在使用中可容納嘗試,它似乎像一個LEFT JOIN並返回所有國家每次 – 2009-06-19 10:10:50