我有一个模型Post与模型Comment有许多关联。
Post有一个主键post_id,它是Comment的外键。
这两个都有一个可见的列。
我对Post.visible选项有一个有效的查询,我需要添加AND来查找具有Post.visible值之一的所有帖子。
对于这些帖子,我需要所有具有Comment.visible值= 1的评论。
我的代码:
$conditions = array(
"OR" => array(
"Post.visible" => array(
1,
2,
3,
4
),
),
"AND" => array (
"Comment.visible" => 1
)
);
$result = $this->Post->find('all', array(
'order' => 'Post.created DESC',
'conditions' => $conditions
));
没有AND的结果是正常的(但我也得到了带有visible = 0的注释)。
当我把条件“Comment.visible”=> 1中有很多关联,它运作良好(但我不能这样做,因为我需要在其他地方获得可见性0的评论)。
使用和它显示此错误:
错误:SQLSTATE [42S22]:找不到列:1054'where子句'中的未知列'Comment.visible'
当我转储SQL时,SELECT子句中的注释表甚至不匹配(也不在LEFT JOIN中)。
答案 0 :(得分:3)
您可以使用CakePHP's Containable Behavior使用类似的内容限制其他模型的结果(这应该有用,但可以根据您的需要进行调整):
//Post model
public $recursive = -1;
public $actsAs = array('Containable');
public function getPosts() {
$posts = $this->find('all',
array(
'conditions' => array(
'Post.visible' => 1
),
'contain' => array(
'Comment' => array(
'conditions' => array('Comment.visible' => 1)
)
)
)
);
return $posts;
}
或者,您可以将关联设置为仅comments
visible
{即使这样,我仍然建议使用'包含'如上所述 - 您只需不需要每次都指定条件:
//Post model
public $hasMany = array(
'Comment' => array(
'conditions' => array('Comment.visible' => 1)
)
);