首页 > 解决方案 > 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数组将是动态数组!

标签: laraveleloquent

解决方案


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本质上是在第一个参数为真时运行该函数。条件条款下的文档中有更多详细信息。


推荐阅读