我有两个表用户和类别。用户表具有链接到类别表的外键。类别表有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;