来自HABTM查询的CakePHP数组结构

时间:2009-07-29 09:27:33

标签: arrays cakephp

我有两个表通过HABTM链接。国家和地区网络。它们通过countries_networks查找表链接在一起。

我需要为每个相应的国家/地区获取所有国家/地区以及所有相关的网络ID。我不需要去获取网络名称,只需从查找表中获取ID就足够了。

如果我发现(全部)它会给我一系列国家但不是我需要的结构。我需要返回一些链接,但我只需要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错误。 甚至是自定义查询?非常感谢能够提供帮助的任何人。

2 个答案:

答案 0 :(得分: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结果略有不同。

或者您可以为网络国家添加模型,但我认为这不是一个好主意。

答案 1 :(得分:1)

Pickledegg,

听起来你应该调查Containable行为。它允许您根据需要在连接的模型上指定条件,并将返回以与正常find()调用相同的方式格式化的数据。

查看手册以获取更多信息。