cakephp 3是否有像autoFields这样的连接来选择连接的所有字段?

时间:2017-01-18 16:28:22

标签: cakephp-3.0

我有一个选择一些计算字段的查询。为了获得主模型和相关模型的所有其他字段,我可以使用autoFields(true)。我还需要在某些条件下加入一些表格。

到目前为止,查询看起来像这样:

$functionsBuilder = $this->MainModel->find()->func();
$documents = $this->MainModel->find('all', [
    'conditions' => […],
    'contain' => […],
    'join' => [
        'table' => 'tablename',
        'alias' => 'AliasName',
        'type' => 'LEFT',
        'foreignKey' => false,
        'conditions' => […],
    ],
])
->autoFields(true)
->select([
    'computed_field_name' => $functionsBuilder->group_concat(['OtherModel.name' => 'literal']),
]);

结果表中的字段不包含在结果中。通常,当您想要包含关联表的所有字段时,可以使用表类作为参数进行select调用,例如->select($this->MainModel->AssociatedModel)

连接中使用的表可能与主模型没有任何(更深层次的)关联。即使 if 它也是一个关联,联接中定义的别名可能是不同的。

到目前为止,我想到的是为连接中引用的表加载表类,然后更改其别名,然后在select中使用它。产量:

$this->loadModel('AssociatedModel');
$this->AssociatedModel->alias('AliasName');
$functionsBuilder = $this->MainModel->find()->func();
$documents = $this->MainModel->find('all', [
    'conditions' => […],
    'contain' => […],
    'join' => [
        'table' => 'tablename',
        'alias' => 'AliasName',
        'type' => 'LEFT',
        'foreignKey' => false,
        'conditions' => […],
    ],
])
->autoFields(true)
->select($this->AssociatedModel)
->select([
    'computed_field_name' => $functionsBuilder->group_concat(['OtherModel.name' => 'literal']),
]);

然后结果包含来自连接的所有字段以及正确的 AliasName

我只是想知道是否有更好的方法来做到这一点。如果我有很多连接,我需要加载很多表类并正确地对它们进行别名。这是可行的,但是可能有更优雅的解决方案吗?

0 个答案:

没有答案