我在Cake
PHP的find()方法和“更深层次”模型关联中的条件有一些问题.有一些这些,但到目前为止我找不到答案.
我的模型协会是用户已经有很多帖子已经有很多评论已经有很多投票和投票属于评论belongsTo Post的属于用户分别. belongsTo关联使用内部连接(‘type’=>’INNER’).
如何使用CakePHP的model-> find()方法查找特定用户的所有评论投票?
我故意使用了四个模型的链,因为这似乎适用于直接相关模型的条件.所以没有在邻居表中使用外键保持列(条件’Post.user_id == 1’而不是User.id == 1).
在sql中,这将是:
SELECT v.* FROM votes v JOIN comments c ON (v.comment_id = c.id) JOIN posts p ON (c.post_id = p.id) JOIN users u ON (p.user_id = u.id) WHERE u.id = 1
我无法使用find()的可容纳的行为来重现这些连接.虽然我可以简单地获取一个用户的所有数据,然后我将收集所有投票从结果数组内.
它不是这样工作(警告:未知列’User.id’):
$this->Vote->recursive = 2; // or higher $this->Vote->find('all',array('conditions' => array('User.id' => 1)));
事实上,一旦添加条件,这甚至不会使用Post而不是User(Vote-> Comment-> Post).制造的SQL查询仅加入投票和评论.
返回的数组应该仅包含上面的SQL查询将返回的投票,其他所有内容应该在进程中“加入”.
注意:我的问题非常接近这个,这帮助我开始:
In cakephp how can I do a find with conditions on a related field?
$joins = array( array('table'=>'comments','alias' => 'Comment','type'=>'inner','conditions'=> array( 'Comment.id = Vote.comment_id' )),array('table'=>'posts','alias' => 'Post','conditions'=> array( 'Post.id = Comment.post_id' )),array('table'=>'users','alias' => 'User','conditions'=> array( 'User.id = Post.user_id','User.id'=>$user_id )) ); $votes = $this->Vote->find('all',array('joins'=>$joins,'recursive'=>-1));