如何在 laravel 中有条件地编写查询?

How to write a query conditionally in laravel?

我是 laravel 的新手,我正在根据条件加入三个表,一切正常,但我需要有条件地编写,如果 $field 是数组,它应该 运行 和 whereIn 否则它应该 运行 where 条件,你能帮我实现这个目标吗

//$field sometimes it's an array sometimes it's a string.
public function find($field){
      
}

对于条件约束,可以使用when()子句:

$query = DB::table(...);

$data = $query
    ->when(is_array($field), function ($query) use ($field) {
        $query->whereIn('my_field', $field);
    }, function ($query) use ($field) {
        $query->where('my_field', $field);
    })
    ->get();

现在,作为提示,您可以这样做:将 $fields 变量包装到一个数组中,然后始终使用 whereIn 子句。您可以使用 Arr::wrap() 函数实现此目的:

use Illuminate\Support\Arr;

// ...

$query = DB::table(...);

$data = $query
    ->whereIn('my_field', Arr::wrap($field))
    ->get();

PS: 我已将相关功能链接到文档,以便您了解它们的工作原理和参数。