![](/img/trans.png)
[英]Laravel Query builder select same table same column with diferent condition
[英]How to build query for multiple condition for same column in laravel query builder?
我想从 'plan_validity' 的 'user' 表中获取计数是 null 或超过今天的日期。 这两个条件都需要检查 user_id 和 status = 1 的同一列。
$currentUser = User::where('user_id', $card_details->user_id)
->where('status', 1)
->where(function (Builder $query) {
return $query
->whereDate('plan_validity', '>=', Carbon::now())
->orWhere('plan_validity', null);
})->count();
给出错误
[2021-11-23 10:40:31] production.ERROR: Argument 1 passed to App\Http\Controllers\ProfileController::App\Http\Controllers\{closure}() must be an instance of App\Http\Controllers\Builder, instance of Illuminate\Database\Eloquent\Builder given, called in /home/hellovcard/public_html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php on line 237 {"userId":17,"exception":"[object] (TypeError(code: 0): Argument 1 passed to App\\Http\\Controllers\\ProfileController::App\\Http\\Controllers\\{closure}() must be an instance of App\\Http\\Controllers\\Builder, instance of Illuminate\\Database\\Eloquent\\Builder given, called in /home/hellovcard/public_html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php on line 237 at /home/hellovcard/public_html/app/Http/Controllers/ProfileController.php:34)
如何修改上述查询?
这是 output 我需要得到
您没有正确组合“where”子句。 最后使用“orWhere”,它基本上忽略了前面 where 子句的所有条件(即它与哪个用户相关),因此将 plan_validity 为 null 的任何行添加到结果中。 因此,在您按用户 ID 和状态查询后,您需要将查询的其余部分组合成一个逻辑组,如下所示:
$user = Users::where('user_id', $card_details->user_id)
->where('status', 1)
->where(function (Builder $query) {
return $query
->whereDate('plan_validity', '>=', Carbon::now())
->orWhere('plan_validity', null);
})
->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.