CakePHP包含的行为无法按预期工作

时间:2012-10-24 19:00:32

标签: php cakephp containable

我正在尝试从2级深度的模型中检索特定字段。 我正在使用容器行为,但未正确检索底层。

下面是代码:

$this->Review->Behaviors->attach('Containable');
    $latestReviews = $this->Review->find('all', array(
        'contain' => array(
            'Business' => array(
                'fields' => array('Business.name'),
                'BusinessType' => array(
                    'fields' => array('BusinessType.url')
                )
            ),
        ),
        'fields' => array('overall'),
    ));

它正在返回的数组:

array(
(int) 0 => array(
    'Review' => array(
        'overall' => '2'
    ),
    'Business' => array(
        'name' => 'Business Name',
        'business_type_id' => '1',
        'id' => '2012'
    )
))

但是,不是给我业务类型ID,而是希望它返回BusinessType url字段。

任何人都可以看到我出错的地方吗?我确定这与CakePHP文档一致。

3 个答案:

答案 0 :(得分:6)

引用手册:

  

使用“字段”和“包含”选项时,请小心包含您的查询直接或间接需要的所有外键。

答案 1 :(得分:0)

我认为你应该删除字段列表中的'fields'选项和模型名称:

$this->Review->Behaviors->attach('Containable');
$latestReviews = $this->Review->find('all', array(
    'contain' => array(
        'Business' => array(
            'fields'       => array('name'),
            'BusinessType' => array(
                'fields' => array('url')
            )
        )
    )));

答案 2 :(得分:0)

使用3.x版本:

  

如果您使用select()限制了要加载的字段,也可以   想要从包含的关联中加载字段,你可以传递   关联对象select():

// Select id & title from articles, but all fields off of Users.
$query = $articles->find()
    ->select(['id', 'title'])
    ->select($articles->Users)
    ->contain(['Users']);

$articles相当于问题中的$this->Review