laravel雄辩查询WhereHas错误的结果



我有两个表和关系如下用户用户表

<表类> id 名称 活动 tbody><<tr>1abc12xyz空3abx0

我想你需要在相关记录(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();

你有idactive列在两个表,所以我认为你需要改变你的查询如下:

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();

最新更新