【问题标题】:CakePhp3 select() in query more than one tierCakePhp3 select() 查询不止一层
【发布时间】:2017-02-21 12:26:45
【问题描述】:

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

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

...这可行,但会返回三个表的每一列

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

...虽然生成的 select 语句似乎是正确的,但这不会返回任何内容

【问题讨论】:

  • 表之间有什么关系?
  • 我认为你把我引向了这个问题......似乎选择只适用于 N:1 ...在我的例子中......如果 Rooms 属于 LevelsLevels 属于 Buildings,它会起作用。如果是 N:M1:N 我不能使用 select() 不是吗?

标签: php mysql cakephp orm cakephp-3.0


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多