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

时间:2014-06-17 06:55:02

标签: 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)
                                ->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

我想要从我的DB中返回与新西兰相匹配的所有结果,并且该类型已售出。

到目前为止它还没有用。它只返回我的数据库中的所有结果,并不仅限于销售结果。

1 个答案:

答案 0 :(得分:2)

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

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

注意:我添加了一个rawurldecode(),因为您的例子来自新西兰'将被传递为新西兰'如果您希望它正确匹配,则需要考虑这一点。