我正在使用CakePHP可容纳。我试过的代码是......
public function detail($slug = "") {
$this->Poet->contain('User.id', 'User.full_name', 'Song.id', 'Song.name', 'Song.name_hindi', 'Song.slug');
$result = $this->Poet->findBySlug($slug);
if (!$result) {
throw new NotFoundException(__('Invalid Poet - ' . $slug));
}
pr($result);
die();
$this->Poet->id = $result['Poet']['id'];
$this->set('result', $result);
}
喜欢这个。现在我将Song.status作为我与Song table的关联。我想只获取那些status = 1
的记录。可能吗?我可以用我的代码选择只有活动记录。
答案 0 :(得分:2)
虽然神奇的findBy *方法不时很方便,但最好只将它们用于琐碎的查询 - 你的查询不再是微不足道的。而是使用普通的查找呼叫,例如:
$result = $this->Poet->find('first', array(
'contain' => array(
'User' => array(
'id',
'full_name'
),
'Song' => array(
'id',
'name',
'name_hindi',
'slug',
)
),
'conditions' => array(
'slug' => $slug,
'Song.status' => 1 // <-
)
));
你没有在问题中提及你的关联,这对于提供准确的答案是相当重要的,但是诗人似乎有很多歌。考虑到这一点,第一个例子会产生一个sql错误,因为Poet和Song之间不会有连接。
可包含允许filtering associated data例如:
$result = $this->Poet->find('first', array(
'contain' => array(
'User' => array(
'id',
'full_name'
),
'Song' => array(
'id',
'name',
'name_hindi',
'slug',
'Song.status = 1' // <-
)
),
'conditions' => array(
'slug' => $slug
)
));
这将返回诗人(无论他们是否有相关歌曲),只返回状态为“1”的歌曲。您可以通过在association definition中定义条件(直接在模型中或使用bindModel)来实现完全相同的事情。