是否可以使用 select()获取两个或多个表远程表的列?
$rooms = TableRegistry::get('Rooms')
->find()
->contain(['Levels.Buildings'])
->toArray();
...这样可行,但会返回三个表中的错误列
$rooms = TableRegistry::get('Rooms')
->find()
->select(['Buildings.name'])
->contain(['Levels.Buildings'])
->toArray();
...这没有任何回报,但是生成的select语句似乎是正确的
答案 0 :(得分:2)
如果您正在处理一对一关系(即 hasOne
或belongsTo
),则只能在主要查询中选择字段。这可能是你的问题。在这种情况下,您需要在contain
本身中指定要包含多人关系的字段: -
$rooms = TableRegistry::get('Rooms')
->find()
->contain([
'Levels' => [
'Buildings' => [
'fields' => 'name'
]
]
])
->toArray();
这是因为CakePHP将执行第二个单独的查询来检索有多个关联的模型数据,您需要在contain
中指定查询条件。