如何在 laravel 查询生成器中为同一列构建多个条件的查询?
Posted
技术标签:
【中文标题】如何在 laravel 查询生成器中为同一列构建多个条件的查询?【英文标题】:How to build query for multiple condition for same column in laravel query builder? 【发布时间】:2022-01-01 15:41:47 【问题描述】:我想从 'plan_validity' 为 null 或大于今天日期的 'user' 表中获取计数。这两个条件都需要检查 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)
如何修改上述查询?
这是我需要得到的输出
enter image description here
【问题讨论】:
orWhere? @AlwaysLearning 您现在可以查看。如何修改? 【参考方案1】:您没有正确组合“where”子句。以“orWhere”结尾,它基本上忽略了前面 where 子句的所有条件(即它与哪个用户相关),因此将 plan_validity 为空的任何行添加到结果中。因此,在您按用户 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();
【讨论】:
错误:传递给 App\Http\Controllers\ProfileController::App\Http\Controllers\closure() 的参数 1 必须是 App\Http\Controllers\Builder 的实例,Illuminate 的实例\Database\Eloquent\Builder 给定,在第 237 行调用 /home/hellovcard/public_html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php 您的使用语句中没有包含 Illuminate\Database\Eloquent\Builder。以上是关于如何在 laravel 查询生成器中为同一列构建多个条件的查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel Eloquent 查询(或使用查询生成器)中为表起别名?
Laravel - 使用 Eloquent 查询构建器在选择中添加自定义列
是否有必要在 laravel 中为数据库操作创建模型(用于查询构建器)?