我在用户和书籍之间有很多关系。如何选择未附加到特定用户的所有图书?
简单但丑陋的方式是加载所有书籍,加载附加到用户的所有书籍并区分馆藏。但必须有一种优雅的方式,我无法弄明白。
可以使用查询构建器和一些加入来完成,但如何使用eloquent实现它?
答案 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();