Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用3个参数中的一个或多个在表中搜索laravel_Laravel_Eloquent_Laravel Query Builder - Fatal编程技术网

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

使用3个参数中的一个或多个在表中搜索laravel,laravel,eloquent,laravel-query-builder,Laravel,Eloquent,Laravel Query Builder,我有搜索页面,有3个选择列表作为输入。当用户选择一个或多个选项并单击搜索按钮时,页面将显示匹配一个或多个此参数的结果,并忽略空参数 我尝试使用: if($request->country != null) { $searchResult = DB::table('table_name')->where('country', $request->country); } if($request->name != null) { $searchResult

我有搜索页面,有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);
}

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

提前感谢

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

 $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);
    });
简单使用
whereOr()
logic,然后按国家、名称或城市显示。这将自动处理合并为一个集合的问题

 $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);
    });

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

$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();

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

$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();

你的意思是你想在同一个表上使用3个参数并得到结果吗?是的,但有些参数可能是空的或空的@mrhn在回答问题时写的,但在你的问题中,你只需要使用链式查询生成器而不是实例化新结果(在第二和第三种情况下):
$searchResult->where('name',$request->name)
$searchResult->where('city',$request->city)
。应该有效。你的意思是你想在同一个表上使用3个参数并得到结果吗?是的,但有些参数可能是空的或空的@mrhn在回答中写道,但在你的问题中,你只需要使用链式查询生成器而不是实例化新结果(在第二和第三种情况下):
$searchResult->where('name',$request->name)
$searchResult->where('city',$request->city)
。应该可以。谢谢你,穆罕默德,我会试试。这个解决方案将无法搜索多个字段?切换案例有点需要避免。谢谢你,穆罕默德,我会试试。这个解决方案将无法搜索多个字段?切换案例有点需要避免。我遇到了错误,语法错误,意外的“}”,你能检查一下吗我想你应该使用where not或where,因为他想要的结果与他所有的搜索结果相匹配。我得到了错误,语法错误,意外的“}”,你能检查一下吗我认为你应该使用where-not或where,因为他希望搜索结果与所有搜索结果相匹配。