Laravel Eloquent:如何在多对多关系中选择不附加记录?

时间:2015-02-18 13:58:49

标签: php mysql laravel eloquent

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

简单但丑陋的方式是加载所有书籍,加载附加到用户的所有书籍并区分馆藏。但必须有一种优雅的方式,我无法弄明白。

可以使用查询构建器和一些加入来完成,但如何使用eloquent实现它?

1 个答案:

答案 0 :(得分:10)

您可以使用whereDoesntHave()

$userId = 1;
$books = Book::whereDoesntHave('users', function($q) use ($userId){
    $q->where('user_id', $userId);
})->get();

此方法允许您按相关模型的存在(whereHas)(或在此情况下不存在:whereDoesntHave)过滤查询。


如果您希望所有未分配给任何用户的图书更简单:

$books = Book::doesntHave('users')->get();