2009-07-29 56 views
0

我有兩個通過HABTM鏈接的表。國家&網絡。他們通過countries_networks查找錶鏈接在一起。來自HABTM查詢的CakePHP數組結構

我需要爲每個相應的國家/地區獲取所有國家和所有相關的網絡ID。我不需要獲取網絡名稱,只需從查找表中獲取ID即可。

如果我做了一個find(全部),它給了我一個國家的數組,但沒有在我需要的結構中。我需要返回的東西聯繫這一點,但我只需要Country.countryName和CountriesNetwork.network_id

Array 
(
    [0] => Array 
     (
      [Country] => Array 
       (
        [countryName] => Aeroplane 
       ) 
      [Network] => Array 
       (
        [0] => Array 
         (
          [id] => 1 
          [CountriesNetwork] => Array 
           (
            [id] => 1 
            [country_id] => 1 
            [network_id] => 1 
           ) 
         ) 

        [1] => Array 
         (
          [id] => 7 
          [CountriesNetwork] => Array 
           (
            [id] => 2 
            [country_id] => 1 
            [network_id] => 7 
           ) 
         ) 
       ) 
     ) 
) 

有沒有用的findall這樣的方式()?就好像我將字段作爲數組傳遞一樣,我似乎總是得到一個未知的列名稱SQL錯誤。 甚至是自定義查詢?非常感謝任何可能幫助的人。

回答

1

Pickledegg,

聽起來像你應該調查包含的行爲。它將允許您按照需要在連接的模型上指定條件,並將以與正常的find()調用相同的方式返回格式化的數據。

查看手冊瞭解更多信息。

1

由於您沒有network_countries的模型,因此無法使用findfindAll來獲取這些值。我認爲最簡單的解決方案將運行自定義查詢來檢索您需要的數據。

$query = "SELECT country_id, network_id 
FROM countries C LEFT JOIN network_countries NC ON (NC.country_id = C.id)" 
$this->Country->query($query); 

不幸的是,結果使用該代碼將被格式化略有不同的則find返回結果。

或者你可以爲網絡國家添加一個模型,但我不認爲這是一個好主意。

+0

謝謝RaYell,我試過,因爲它發生了,但它給了我重複的國家然後,我想格式爲'CountryName',與網絡ID或名稱的數組。 – 2009-07-29 10:35:43

+0

是的,它重複了國家,因爲這就是LEFT JOIN的工作方式,但是我不知道你是否可以簡單地做到這一點。我想你可以突出國家,然後爲每個國家運行一個查詢來獲取網絡ID,但這將需要運行大量的查詢,而不是一個。你總是可以通過country_id對結果進行排序,並遍歷結果,並檢查當前行的country_id是否發生了變化,我不能認爲任何更簡單的事情,恐怕 – RaYell 2009-07-29 18:25:22