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

Php Laravel:根据输入参数选择结果,php,laravel,laravel-4,Php,Laravel,Laravel 4,我的控制器中有一个搜索查询 public function byQuery($query) { $q = $this->prepareQuery($query); if(str_contains($q,'zealand')) { $q = 'nz'; } $titles = Title::where('suburb', 'LIKE', $q)

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

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
它将返回我的数据库中与新西兰匹配的所有结果

如果我搜索

   search?q=new zealand&type=sold
我想如果返回所有的结果,从我的数据库匹配新西兰和类型是出售


到目前为止它还不起作用。它只返回my DB中的所有结果,并且不将它们限制为已售出的结果。

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

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

注意:我添加了一个
rawurldecode()
,因为在您的示例中,“纽西兰”将被传递为“纽西兰+新西兰”,如果您希望它正确匹配,需要考虑到这一点。

嗨,Damien,谢谢您的帮助。我已将输入类添加到我的命名空间中,并用您的输入代码替换了旧的输入代码,但它仍然没有返回正确的结果?如果对db运行生成的查询,它是否找到结果?是。。我有四种类型,销售、购买、租赁、提供,它们都有结果,但查询不会将它们分开,它将返回所有四种类型,这可能意味着您没有正确地构建查询(检查生成的sql)Hi-Damien我可能正在使用->或者where('postcode','LIKE',$q)->或者where('title','LIKE',$q)->orWhere('country','LIKE',$q)->orWhere('state','LIKE',$q);因此,查询将返回类型为“销售”的位置,或新西兰等国家类型为“购买”的位置?