我是laravel 5.3的新手,请帮我解决这个问题。我需要通过三个参数来过滤数据库中的匹配记录,例如类别,位置,搜索字符串。这是我的代码:
$results = DB::table('ads')
->join('category', 'category.categoryID', '=', 'ads.categoryID')
->join('sub_categories', 'sub_categories.subCategoryID', '=', 'ads.subCategoryID')
->join('site_users', 'site_users.siteUserID', '=', 'ads.createdBy')
->join('location', 'location.locationID', '=', 'site_users.location')
->select('ads.*', 'category.categoryName', 'sub_categories.subCategoryName', 'location.locationName')
->where([
'ads.title', 'like', '%' . $data['q'] . '%',
'ads.isActive', 1
])
->orWhere([
'location.locationName', 'like', '%' . $data['loc'] . '%',
'category.categoryName', 'like', '%' . $data['cat'] . '%'
])
->toSql();
dd($results);
我调试了这段代码的结果是:
"select `ads`.*, `category`.`categoryName`, `sub_categories`.`subCategoryName`, `location`.`locationName` from `ads` inner join `category` on `category`.`categoryID` = `ads`.`categoryID` inner join `sub_categories` on `sub_categories`.`subCategoryID` = `ads`.`subCategoryID` inner join `site_users` on `site_users`.`siteUserID` = `ads`.`createdBy` inner join `location` on `location`.`locationID` = `site_users`.`location` where (`0` = ? and `1` = ? and `2` = ? and `3` = ? and `4` = ?) or (`0` = ? and `1` = ? and `2` = ? and `3` = ? and `4` = ? and `5` = ?)"
如何使用多个类似操作执行简单搜索功能 请给我一个指南。感谢
答案 0 :(得分:0)
这样的事情:
$results = DB::table('ads')
->join('category', 'category.categoryID', '=', 'ads.categoryID')
->join('sub_categories', 'sub_categories.subCategoryID', '=', 'ads.subCategoryID')
->join('site_users', 'site_users.siteUserID', '=', 'ads.createdBy')
->join('location', 'location.locationID', '=', 'site_users.location')
->select('ads.*', 'category.categoryName', 'sub_categories.subCategoryName', 'location.locationName')
->where(function ($query) use ($data){
$query->where('ads.title', 'LIKE', '%'.$data['q'].'%')
->orWhere('location.locationName', 'LIKE', '%'.$data['loc'].'%')
->orWhere('category.categoryName', 'LIKE', '%'.$data['cat'].'%')
})
->where([
'ads.isActive' => 1
])
->toSql();
希望有所帮助