0

我正在尝试从 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 文档是一致的。

4

3 回答 3

6

引用手册:

当使用 'fields' 和 'contain' 选项时 - 小心包含您的查询直接或间接需要的所有外键。

于 2012-10-24T19:54:42.747 回答
0

我认为您应该删除字段列表中的“字段”选项和模型名称:

$this->Review->Behaviors->attach('Containable');
$latestReviews = $this->Review->find('all', array(
    'contain' => array(
        'Business' => array(
            'fields'       => array('name'),
            'BusinessType' => array(
                'fields' => array('url')
            )
        )
    )));
于 2012-10-24T19:50:02.240 回答
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

于 2016-12-16T23:49:03.437 回答