Laravel Eloquent: 如何select 不附加记录在多对多关系中?
Laravel Eloquent: How to select not attached records in many to many relationship?
我在用户和图书之间建立了多对多关系。如何 select 所有不属于特定用户的书籍?
简单但丑陋的方法是加载所有书籍,加载所有附属于用户的书籍并比较集合。但必须有一个优雅的方式,我就是想不通。
可以使用查询构建器和一些连接来完成,但是如何使用 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();
我在用户和图书之间建立了多对多关系。如何 select 所有不属于特定用户的书籍?
简单但丑陋的方法是加载所有书籍,加载所有附属于用户的书籍并比较集合。但必须有一个优雅的方式,我就是想不通。
可以使用查询构建器和一些连接来完成,但是如何使用 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();