我想知道可以向where
添加with
条件。
如:
Comment::with('Users')->where('allowed', 'Y')->get();
我试图找到一种更简单的方法来进行查询,避免使用看似相当冗长的whereHas
方法:
$users = Comment::whereHas('users', function($q)
{
$q->where('allowed', 'Y');
})->get();
我想在内部生成的原始查询应该是这样的:
select * from comments, users
where users.id = comments.user_id and
users.allowed = 'Y'
我习惯使用CakePHP,其中查询看起来非常简单:
$this->Comments->find('all', array('Users.allowed' => 'Y'));
我定义的关系是:
//Comments.php
public function Users()
{
return $this->belongsTo('Users');
}
//Users.php
public function Comments(){
return $this->hasMany('Comments');
}
答案 0 :(得分:1)
你可以试试这个
$users = User::with(array('comments' => function($q)
{
$q->where('attachment', 1);
}))->get();
更新:或者,您可以在User
模型中使用关系中的where子句
// Relation for comments with attachment value 1
// and if hasMany relation is used
public function commentsWithAttachment()
{
return $this->hasMany('Comment')->where('attachment', 1);
}
// Relation for all comments
// and if hasMany relation is used
public function comments()
{
return $this->hasMany('Comment');
}
所以,你可以使用
// Comments with attachment value 1
User::with('commentsWithAttachment')->get();
// All comments
User::with('comments')->get();
更新:我认为您希望所有评论都与用户的附件为1,如果这是你想要的那么它应该是评论不是用户
Comment::with('user')->where('attachment', 1)->get();
在这种情况下,你的关系应该是
public function user()
{
return $this->belongsTo('User'); // if model name is User
}
因为一条评论只属于一个用户。