Laravel 5.2查询1表用于邮政编码,然后抓取ID并查询另一个

时间:2016-03-24 06:04:55

标签: php mysql laravel eloquent

我正在尝试学习如何进行查询。搜索字段用于存储在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'));
}

2 个答案:

答案 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'));
}