我正在尝试学习如何进行查询。搜索字段用于存储在user_profiles内部的邮政编码(而user_profiles与用户有关系)
所以我有一些东西可以返回一个结果(但是有超过1个),但我听说2个查询是一个很糟糕
public function index()
{
$queryUsername = Request::get('username');
$queryPostcode = Request::get('postcode');
if ($queryUsername) {
$users = User::where('username', 'LIKE', "%$queryUsername%")->get();
}
if ($queryPostcode) {
$usersInfo = UserProfile::where('postcode', '=', "$queryPostcode")->value('user_id');
$users = User::where('id', '=', "$usersInfo")->get();
}
return view('view', compact('users'));
}
答案 0 :(得分:1)
对于引用的问题更好的方法是使用join而不是两个不同的查询
public function index()
{
$queryUsername = Request::get('username');
$queryPostcode = Request::get('postcode');
if ($queryUsername) {
$users = User::where('username', 'LIKE', "%$queryUsername%")->get();
}
if ($queryPostcode) {
$users = Users::rightJoin('user_profiles','users.id', '=', 'user_profiles.user_id')
->where('user_profiles.postcode', '=', "$queryPostcode")
->select(\DB::raw('users.*'))
->get();
}
return view('view', compact('users'));
}
如果您正在寻找用户名的完全匹配 使用LIKE进行用户名匹配并不好 $ users = User :: where(' username',' LIKE',"%$ queryUsername%") - > get(); 因为对于用户名chris和chrisgeorge以及christy,查询%chris%将起作用,并且您将无法获得完全匹配,因此建议使用' ='而不是喜欢
答案 1 :(得分:0)
试试这个:
public function index(){
$queryUsername = Request::get('username');
$queryPostcode = Request::get('postcode');
if ($queryUsername):
$users = User::where('username', 'LIKE', "%".$queryUsername."%")->get();
elseif ($queryPostcode):
$usersInfo = UserProfile::where('postcode', '=', $queryPostcode)->value('user_id');
$users = User::where('id', '=', "$usersInfo")->get();
endif;
return view('view', compact('users'));
}