Laravel query builder with where and orWhere error: Too few arguments to function ... 1 passed and exactly 2 expected

Laravel query builder with where and orWhere error: Too few arguments to function ... 1 passed and exactly 2 expected

我正在通过 POST 请求一个 json 结构如下:

{
    "text": "ca",
    "type": "1"
}

这条路线:

Route::post('search', [ProductController::class, 'search']);

然后在搜索功能上我所做的是 运行 查询以获取他的名称或描述包含搜索文本并且具有相同 type_id 提到的所有产品 JSON 请求:

public function search(Request $search){

        return DB::table('products')
            ->where('type_id', '=', $search->type)
            ->orWhere(function($query, $search){
                $query->where('description', 'LIKE', '%'.$search->text.'%')
                      ->where('name', $search->text);
            })
            ->get();
    }

如果我不对请求进行分组,我认为它应该可以正常工作但尝试过并没有崩溃但返回了不正确的结果,就像它也将 type_id 作为 OR 一样。

当您想将参数传递给 clouser 函数时,您应该使用单词 'use':

 ->orWhere(function($query)use( $search){
                $query->where('description', 'LIKE', '%'.$search->text.'%')
                      ->where('name', $search->text);
            })