在Laravel 5.6中使用where条件从两个表中获取数据

时间:2018-08-16 19:51:49

标签: php mysql database laravel laravel-5.6

我想从两个表概要文件中获取数据,并且用户将它们与一对一关联。我要从两个表中获取数据,但是现在我想在用户表中添加该列的条件。 该代码可以很好地获取数据。

        $clients = Profile::all();
    return view('admin.clients', compact('clients'));

但是我想要这样的东西。

'select profile.*, user.* from profile, user where profile.user_id=users.id and users.role_id=3';

如何将该查询转换为上述查询的形状。

2 个答案:

答案 0 :(得分:1)

您可以在查询关系或关系本身中添加一个位置。

让我们说您有用户关系,您可以这样做

Profile::with(['users' => function($users) {
    $users->where('role_id','=',3);
}])->get();

这将为您提供所有配置文件,并过滤角色=这些配置文件中的3个用户。

如果要获取具有角色= 3的用户的个人资料,则可以使用whereHas

Profile::with('users')->whereHas('users', function($users) {
    $users->where('role_id','=',3);
})
->get();

答案 1 :(得分:0)

如果您要获取具有关系表的数据,并在查询中使用where条件编写此代码,那么100%对我有用。

Profile::join('users', function($join){
        $join->on('profiles.user_id', '=', 'users.id')
        ->where('users.role_id', '=', 3);
    })
    ->get();

使用连接,我可以成功获取用户角色ID等于3的所有配置文件以及其他关系表数据,例如用户表中的电子邮件和服务表中的服务标题,以及配置文件表中的所有数据