使用3个参数中的一个或多个laravel在表中搜索

问题描述 投票:0回答:2

我有搜索页面,有3个选择列表作为输入。当用户选择一个或多个选项并单击搜索按钮时,页面将显示与该参数中的一个或多个匹配且忽略空参数的结果。

我尝试使用:

if($request->country != null)
{
     $searchResult = DB::table('table_name')->where('country', $request->country);
}

if($request->name != null)
{
     $searchResult = DB::table('table_name')->where('name', $request->name );
}

if($request->city != null)
{
     $searchResult = DB::table('table_name')->where('city', $request->city);
}

当一个或多个参数为空时,我如何显示结果。并将结果合并到一个集合中。还是有更好的解决方案呢?

提前谢谢您

laravel eloquent laravel-query-builder
2个回答
0
投票

如果要跳过不可用的搜索参数,可以使用。

$query=DB::table('table_name');
    switch (true){
        case isset($request->country);
            $query->where('country',$request->country);
            continue;
        case isset($request->city);
            $query->where('city',$request->city);
            continue;
        case isset($request->name);
            $query->where('name',$request->name);
    }
   $result= $query->get();

1
投票

简单使用whereOr()逻辑,然后按国家,名称或城市。这将自动处理合并为一个集合问题。

 $searchResult = DB::table('table_name')->where('country', $request->country)
     ->orWhere('name', $request->name )
     ->orWhere('city', $request->city);

为了避免使用空参数,请使用when()函数,该函数仅在条件为真时才会执行。

$searchResult = DB::table('table_name')
    ->when($request->country, function ($query) use ($request) {
        $query->orWhere('country', $request->country);
    })->when($request->name, function ($query) use ($request) {
        $query->orWhere('name', $request->name);
    })->when($request->city, function ($query) use ($request) {
        $query->orWhere('city', $request->city);
    });
© www.soinside.com 2019 - 2024. All rights reserved.