Laravel:根据输入参数选择结果


Laravel: Select results based on input parameter

我在控制器中有一个搜索查询

public function byQuery($query)
    {
        $q = $this->prepareQuery($query);
        if(str_contains($q,'zealand'))
        {
        $q = 'nz';
        }
        $titles = Title::where('suburb', 'LIKE', $q)
                                ->orWhere('postcode', 'LIKE', $q)
                                ->orWhere('title', 'LIKE', $q)
                                ->orWhere('country', 'LIKE', $q)
                                ->orWhere('state', 'LIKE', $q);
        if (isset($input['type']) && $input['type'] != '')
        {
            $titles = $titles->where('type', 'like', '%'. $input['type'].'%');
        } 
            $titles = $titles->orderBy('href', 'ASC')
                    ->orderBy(DB::raw('RAND()'))
                    ->paginate(36);
            return $titles;
    }
如果我搜索像 这样的搜索
search?q=new zealand

它将返回DB中与new zealand匹配的所有结果

如果搜索

   search?q=new zealand&type=sold

我想让它返回DB中所有匹配new zealand且类型为sold的结果。

到目前为止还不起作用。它只返回所有的结果从我的数据库,而不限制他们只是出售的结果。

$input未定义(至少,我没有在您发布的代码中看到它),因此isset()将始终返回false。使用Input类,它已经可以进行检查:

if (Input::has('type'))
{
   $titles = $titles->where('type', 'like', '%'. rawurldecode(Input::get('type')).'%');
} 

注意:我添加了一个rawurldecode(),因为从您的示例中'new zealand'将被传递为'new+zealand',如果您希望它正确匹配,则需要考虑到这一点。