我有两个表用户和类别。用户表具有链接到类别表的外键。类别表有2列ID和名称
发送search_item时,我想获得名称的value
if(!empty($request->get("search_item"))) {
$users = User::join("categories", "users.business_category", "=", "categories.id")
->where($request->get("search_item"), function ($q) use ($request) {
$q->where('users.full_name', 'like', '%' . $request->get("search_item") . '%')
->orWhere('categories.business_category', 'like', '%' . $request->get("search_item") . '%')
->orWhere('users.email', 'like', '%' . $request->get("search_item") . '%')
->orWhere('users.phone', 'like', '%' . $request->get("search_item") . '%');
})
->where($request->status, function ($q) use ($request) {
$q->where('Role', "Artisan");
})
->paginate(20);
}else{
$users = User::where('Role','=', "Artisan")->orderBy('id','DESC')->paginate(20);
}
return $users;
但是我遇到了这个错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'fashion' in 'where clause' (SQL: select count(*) as aggregate from `users` inner join `categories` on `users`.`business_category` = `categories`.`id` where `fashion` = (select * where `users`.`full_name` like %fashion% or `users`.`email` like %fashion% or `users`.`phone` like %fashion%) and `` = (select * where `Role` = Artisan))
分析解答
错误是由于您构建动态查询的方式。您正在尝试将$request->get("search_item")
的值用作where
子句中的列名,这会导致Unknown column 'fashion'
错误。
if (!empty($request->get("search_item"))) {
$users = User::join("categories", "users.business_category", "=", "categories.id")
->where(function ($query) use ($request) {
$searchItem = '%' . $request->get("search_item") . '%';
$query->where('users.full_name', 'like', $searchItem)
->orWhere('categories.name', 'like', $searchItem)
->orWhere('users.email', 'like', $searchItem)
->orWhere('users.phone', 'like', $searchItem);
})
->where('Role', '=', "Artisan")
->paginate(20);
} else {
$users = User::where('Role', '=', "Artisan")->orderBy('id', 'DESC')->paginate(20);
}
return $users;