我有两个表通过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错误。 甚至是自定义查询?非常感谢能够提供帮助的任何人。
答案 0 :(得分:1)
由于您没有network_countries的模型,因此无法使用find
或findAll
获取这些值。我认为最简单的解决方案是运行自定义查询以检索所需的数据。
$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()调用相同的方式格式化的数据。
查看手册以获取更多信息。