我的目标是使用Laravel搜索姓氏和名字。在编写代码时,它会搜索名字或姓氏,我想要做的就是让它同时搜索名字和。我该怎么办?
PHP-搜索语句
public function search($search_input) {
$response = DB::table(self::$table)
->select(array(
'ID',
'User_ID',
'Signup_Date',
'First_Name',
'Last_Name',
DB::raw('CONCAT(First_Name," ",Last_Name) AS Name')
))
->where('First_Name', 'LIKE', '%'.$search_input.'%')
->or_where('Last_Name', 'LIKE', '%'.$search_input.'%')
->where_not_null('User_ID')
->order_by('Signup_Date', 'desc')
->get();
return $response;
}
编辑:我忘了包括我们正在使用Laravel 3。https://laravel3.veliovgroup.com/docs/database/fluent
答案 0 :(得分:1)
如果您同时搜索名字和姓氏,那么我怀疑它会返回结果。因为这将意味着搜索查询将必须匹配一条记录,该记录的输入就像名字和名字一样。我认为您实际追求的是更多复合搜索。当查询中包含选择项时,您也许可以执行以下操作。
public function search($search_input) {
$response = DB::table(self::$table)
->select(array(
'ID',
'User_ID',
'Signup_Date',
'First_Name',
'Last_Name',
DB::raw('CONCAT(First_Name," ",Last_Name) AS Name')
))
->where('Name', 'LIKE', '%'.$search_input.'%')
->where_not_null('User_ID')
->order_by('Signup_Date', 'desc')
->get();
return $response;
}
这应该起作用,因为Name
是由CONCAT
函数设置的。
答案 1 :(得分:1)
据我了解,您的查询条件是
(First_Name LIKE "%xx%" OR Last_name LIKE "%xx%") AND User_id IS NOT NULL
您应按以下方式修改查询以使用nested where clauses:
public function search($search_input) {
$response = DB::table(self::$table)
->select(array(
'ID',
'User_ID',
'Signup_Date',
'First_Name',
'Last_Name',
DB::raw('CONCAT(First_Name," ",Last_Name) AS Name')
))
->where(function($query) use ($search_input) {
$query->where('First_Name', 'LIKE', '%'.$search_input.'%')
->or_where('Last_Name', 'LIKE', '%'.$search_input.'%');
}
->where_not_null('User_ID')
->order_by('Signup_Date', 'desc')
->get();
return $response;
}