Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.2查询1个表中的邮政编码,然后获取ID并查询另一个表_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php Laravel 5.2查询1个表中的邮政编码,然后获取ID并查询另一个表

Php Laravel 5.2查询1个表中的邮政编码,然后获取ID并查询另一个表,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我正在努力学习如何进行查询。搜索字段用于存储在用户配置文件中的邮政编码(并且用户配置文件与用户有关系) 所以我有一些东西返回一个结果(但是不止一个),但我听说为一个做两个查询是不好的 public function index() { $queryUsername = Request::get('username'); $queryPostcode = Request::get('postcode'); if ($queryUsername) { $use

我正在努力学习如何进行查询。搜索字段用于存储在用户配置文件中的邮政编码(并且用户配置文件与用户有关系)

所以我有一些东西返回一个结果(但是不止一个),但我听说为一个做两个查询是不好的

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'));
}
试试这个:

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

对于引用的问题,更好的方法是使用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和chrisy,查询%chris%将起作用,并且您不会得到精确的匹配,因此建议使用“=”而不是like

出于某种原因,这也只返回一个结果,>\u我认为这是因为您按用户id进行的查询应该只有一个。天哪,您真是天赐之物!非常感谢!!我在做左连接和尝试连接,但不知道如何解决它!虽然不需要->选择(\DB::raw('users.*'))