我在控制器中有一个搜索查询
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',如果您希望它正确匹配,则需要考虑到这一点。