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