CakePhp3 select()在查询多个层

时间:2017-02-21 12:26:45

标签: php mysql cakephp orm cakephp-3.0

是否可以使用 select()获取两个或多个表远程表的列?

$rooms = TableRegistry::get('Rooms')
    ->find()
    ->contain(['Levels.Buildings'])
    ->toArray();

...这样可行,但会返回三个表中的错误列

$rooms = TableRegistry::get('Rooms')
    ->find()
    ->select(['Buildings.name'])
    ->contain(['Levels.Buildings'])
    ->toArray();

...这没有任何回报,但是生成的select语句似乎是正确的

1 个答案:

答案 0 :(得分:2)

如果您正在处理一对一关系( hasOnebelongsTo),则只能在主要查询中选择字段。这可能是你的问题。在这种情况下,您需要在contain本身中指定要包含多人关系的字段: -

$rooms = TableRegistry::get('Rooms')
    ->find()
    ->contain([
        'Levels' => [
            'Buildings' => [
                'fields' => 'name'
            ]
        ]
    ])
    ->toArray();

这是因为CakePHP将执行第二个单独的查询来检索有多个关联的模型数据,您需要在contain中指定查询条件。