我和用户和书籍之间有很多关系。如何选择未附加到特定用户的所有书籍?

一种简单但丑陋的方法是加载所有书籍,加载所有附加到用户的书籍并比较馆藏。但是必须有一种优雅的方式,我只是想不通。

可以使用查询生成器和一些联接来完成,但是如何用 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();

09-25 16:48