我有两个表和关系如下用户用户表
<表类>
id
名称
活动
tbody><<tr>1 abc 1 2xyz 空 3 abx 0 表类>
我想你需要在相关记录(with())上应用过滤器,而不是在整个查询上应用过滤器。因此,这样您将始终获得用户列表和活动图书列表
User::with(['book'=> function($query) {
$query->where('active', 1);
}])
->where(function ($query) {
$query->where('active', 1)
->orWhereNull('active');
})
->get();
我在这里使用了逻辑分组,所以如果你有更多的过滤子句要添加到你的查询。
或者你可以在你的用户模型中定义一个新的关系,只选择活动的相关书籍作为
class User extends Model
{
public function book()
{
return $this->hasMany(Book::class, 'user_id', 'id');
}
public function active_books()
{
return $this->hasMany(Book::class, 'user_id', 'id')
->where('active', '=', 1);
}
}
User::with('active_books')
->where(function ($query) {
$query->where('active', 1)
->orWhereNull('active');
})
->get();
你有id
和active
列在两个表,所以我认为你需要改变你的查询如下:
User::with('book')
->WhereHas('book', function($query) {
$query->where(['books.active'=> 1]); // books table active column
})
->where(['id'=> 1,'active'=> 1]) // users table id, active column
->get();