0

食谱描述了如何检索实体的所有翻译,但它使用的是find('translations'). 它还讨论了如何检索关联的所有翻译。我希望将这些、使用get和包含功能融合在一起,因为我已经在同时读取相关记录。

要加载一个联赛和所有相关的部门及其翻译,这很有效:

$league = $this->Leagues->get($id, ['contain' => [
    'Divisions' => [
        'queryBuilder' => function (Query $q) {
            return $q->find('translations');
        },
    ],
]]);

到目前为止,一切都很好。但我还需要加载联赛的所有翻译。这有效:

$league = $this->Leagues->find('translations')->where(['Leagues.id' => $id])->contain([
    'Divisions' => [
        'queryBuilder' => function (Query $q) {
            return $q->find('translations');
        },
    ],
])->first();

但它与我用于读取单个实体的所有其他代码不一致,该实体始终使用get. 我试过这个:

$league = $this->Leagues->get($id, ['contain' => [
    'queryBuilder' => function (Query $q) {
        return $q->find('translations');
    },
    'Divisions' => [
        'queryBuilder' => function (Query $q) {
            return $q->find('translations');
        },
    ],
]])->first();

但它会导致“错误:无法使用闭包类型的对象作为数组” EagerLoader::normalized

我是否遗漏了一些明显的东西(或不那么明显的东西?),或者这不是一个受支持的选项?

4

1 回答 1

1

queryBuilder是实际遏制的一个选项,您不能将其用作顶级密钥。

您正在寻找的是该get()方法的finder选项:

$league = $this->Leagues
    ->get($id, [
        'finder' => 'translations',
        'contain' => [
            'Divisions' => [
                'queryBuilder' => function (Query $q) {
                    return $q->find('translations');
                },
            ],
        ]
    ])
    ->first();

也可以看看

于 2020-03-28T23:19:51.500 回答