【发布时间】:2015-02-18 13:58:49
【问题描述】:
我在用户和图书之间存在多对多关系。如何选择所有不属于特定用户的书籍?
简单但丑陋的方法是加载所有书籍,加载所有附加到用户的书籍并区分集合。但是必须有一种优雅的方式,我就是想不通。
可以使用查询构建器和一些连接来完成,但是如何使用 eloquent 来实现呢?
【问题讨论】:
标签: php mysql laravel eloquent
我在用户和图书之间存在多对多关系。如何选择所有不属于特定用户的书籍?
简单但丑陋的方法是加载所有书籍,加载所有附加到用户的书籍并区分集合。但是必须有一种优雅的方式,我就是想不通。
可以使用查询构建器和一些连接来完成,但是如何使用 eloquent 来实现呢?
【问题讨论】:
标签: php mysql laravel 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();
【讨论】: