我和用户和书籍之间有很多关系。如何选择未附加到特定用户的所有书籍?
一种简单但丑陋的方法是加载所有书籍,加载所有附加到用户的书籍并比较馆藏。但是必须有一种优雅的方式,我只是想不通。
可以使用查询生成器和一些联接来完成,但是如何用 Eloquent 方法实现呢?
最佳答案
您可以为此使用whereDoesntHave()
:
$userId = 1;
$books = Book::whereDoesntHave('users', function($q) use ($userId){
$q->where('user_id', $userId);
})->get();
通过此方法,您可以根据相关模型的存在(
whereHas
)(或者在这种情况下不存在:whereDoesntHave
)来过滤查询。如果您希望所有未分配给任何用户的图书,则要简单一些:
$books = Book::doesntHave('users')->get();