WhereHas
和 WhereNotIn
是 Laravel 框架中用于构建 Eloquent 查询的查询作用域(Query Scopes)方法。这些方法允许你在关联模型上执行复杂的查询条件。
WhereHas
方法用于在关联模型上设置条件,并且只获取满足这些条件的结果。这对于处理“有特定关联的模型”非常有用。
基础概念:
WhereHas
允许你在关联模型上应用额外的查询条件。优势:
类型与应用场景:
示例代码:
$users = User::whereHas('orders', function ($query) {
$query->where('status', 'completed');
})->get();
WhereNotIn
方法用于排除在指定数组中的值。它通常与 whereHas
结合使用,以排除具有特定关联的模型。
基础概念:
WhereNotIn
允许你指定一个字段,其值不应在给定的数组中。优势:
类型与应用场景:
示例代码(结合 whereHas
):
$users = User::whereHas('roles', function ($query) {
$query->whereNotIn('name', ['admin', 'editor']);
})->get();
当你在 whereHas
内部使用 whereNotIn
时,你实际上是在指定一个条件,该条件要求关联模型不包含在指定的数组中的值。
为什么会这样/原因是什么?
这种组合通常用于复杂的查询场景,其中你需要找到满足某些关联条件的模型,但同时这些关联模型又不能满足其他特定条件。
如何解决这些问题?
使用上述的 whereHas
和 whereNotIn
组合即可解决这类问题。
示例代码:
$users = User::whereHas('orders', function ($query) {
$query->whereNotIn('product_id', [1, 2, 3]);
})->get();
在这个例子中,我们查找了所有有订单的用户,但这些订单的产品 ID 不应该是 1、2 或 3。
总之,WhereHas
和 WhereNotIn
是 Laravel 中非常有用的查询构建器方法,它们允许你构建复杂的查询条件,同时保持代码的清晰和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云