使用Contain获取数据的最佳规则

时间:2015-06-22 07:33:21

标签: cakephp cakephp-3.0

在CakePHP 3中,ORM发生了变化,我找不到从数据库中选择所需数据的正确方法。

在CakePHP 2中,我使用contain('User.name','User.id'),但在CakePHP 3中,此代码不起作用。

那么我如何才能从用户中选择idname

代码:

$query = $data->find()->contain(['Users'])->execute()->fetchAll('assoc');
// I want only user.id and user.name.

2 个答案:

答案 0 :(得分:1)

$articles = $this->Model->find()
        ->select(['fields_you_want_from_this_Model'])
        ->contain(['Assoc_Model'  => function($q) {
            return $q
                ->select(['fields_you_want_from_the_associated_model']);
        }]);

答案 1 :(得分:1)

你必须看看这个页面:http://book.cakephp.org/3.0/en/orm/query-builder.html#passing-conditions-to-contain

在某些情况下,您必须使用autoFields方法。

当你在callable中选择几个字段时要小心包含,你也总是要选择外键:

  

限制从关联中提取的字段时,必须确保选择了外键列。如果未选择外键字段,将导致相关数据不会出现在最终结果中。