laravel - Laravel 雄辩的 whereIn 一个查询
问题描述
在 laravel 中,我可以使用许多 where 规则作为数组,使用 laravel eloquentwhere
方法对数据库运行一个查询以获得所需的结果。
代码:
$where = [];
$where[] = ['user_id', '!=', null];
$where[] = ['updated_at', '>=', date('Y-m-d H:i:s')];
if($request->searchTerm) {
$where[] = ['title', 'like', '%' . $request->searchTerm . '%'];
}
Model::where($where)->get();
问题部分:
现在我需要使用 Laravel Eloquent 方法whereIn
和数组参数来通过一个查询获得所需的结果。
我尝试通过循环方法但对数据库进行了许多查询。
代码:
$model = new Model;
$whereIn = [];
$whereIn[] = ['date', '>=', Carbon::now()->subDays(10)];
$whereIn[] = ['user_role', 'candidate'];
if (!empty($scope) && is_array($scope)) {
$whereIn[] = ['user_id', $scope];
}
if(is_array($employment) && !empty($employment)) {
$whereIn[] = ['employment', $employment];
}
if(is_array($experience) && !empty($experience)) {
$whereIn[] = ['experience', $experience];
}
foreach ($whereIn as $v) {
$model = $model->whereIn($v[0], $v[1]);
}
dump($model->get());
首先我很累$model->whereIn($whereIn)->get()
,但它是返回错误。whereIn
使用不循环的一个查询可以获得结果吗?
注意:我的$whereIn
数组将是动态数组!
解决方案
whereIn
是一个查询构建器函数,因此您不能直接在模型上使用它。相反,您应该创建一个查询构建器实例。我还建议您使用when
而不是if
语句:
$models = Model::when(!empty($scope) && is_array($scope), function ($query) use ($scope) {
$query->whereIn('user_id', $scope);
})->when(!empty($employment) && is_array($employment), function ($query) use ($employment) {
$query->whereIn('employment', $employment);
})->when(!empty($experience) && is_array($experience), function ($query) use ($experience) {
$query->whereIn('experience', $experience);
})->get();
dump($models);
when
本质上是在第一个参数为真时运行该函数。条件条款下的文档中有更多详细信息。
推荐阅读
- google-apps-script - INDEX-MATCH 公式在 Google 表格中返回相同的值
- css - 如何画出类似梯形的卡片?
- huawei-mobile-services - HMS Map Kit - React Native Marker 问题
- git - 使用来自单个 git 存储库的功能标志管理多个代码库
- python-3.x - Python 3.8.5 FTPS 连接
- xamarin.forms - MapBox 是否支持 Xamarin.Forms (Android/IOS/UWP) 中的室内导航实现?
- javascript - 缓存 - 如何使用它?(在初学者的火力基地中)
- javascript - 在 js 中解决问题
- druid - Apache Druid:当我尝试加载快速启动数据时,我的虚拟机挂起
- javascript - Javascript函数和表达式函数