使用Laravel Eloquent选择多个表

时间:2018-04-26 11:46:45

标签: php laravel laravel-5 eloquent

我有3个表 - 用户,角色和role_user。每个用户都被分配到role_user表中的角色,角色列表可以在角色表中找到。我想选择角色ID为12的所有用户。我目前正在使用查询构建器执行此操作,但我需要它以雄辩的格式。我对Laravel雄辩并不是很好,我需要帮助才能将查询转换为雄辩。 这就是我目前正在做的事情:

 $users = DB::table('users')
            ->join('role_user', 'users.id', '=', 'role_user.user_id')
            ->join('roles', 'roles.id', '=', 'role_user.role_id')
            ->where('roles.id', '=', 12)
            ->get();

4 个答案:

答案 0 :(得分:2)

使用Eloquent非常容易检索关系数据结帐,以及Laravel 5中的方案示例

我们有三个模型

1)用户(有一个role_user)

2)角色(有很多role_user)

3)RoleUser(属于用户和角色)

1)Users.php

<?php

namespace App\Models;
 use Eloquent;

class Users extends Eloquent{

    protected $table = 'users';

    public function userrole()
    {
        return $this->hasOne('App\Models\RoleUser');
    }

}

2)Roles.php

<?php

namespace App\Models;

use Eloquent;

class Roles extends Eloquent
{
    protected $table = "roles";

    public function rolesuser()
    {
        return $this->hasMany('App\Models\RoleUser');
    }

}

2)RoleUser.php

<?php

namespace App\Models;
 use Eloquent;

class RoleUser extends Eloquent{

    protected $table = 'role_user';

    public function user()
    {
        return $this->belongsTo('App\Models\Users');
    }

    public function role()
    {
        return $this->belongsTo('App\Models\Roles');
    }

}

您需要检查数据库是否与模型中的关系和设置有关。用户在role_user表中有一个角色。角色在role_user表中为用户提供了许多角色。角色用户属于用户和角色。在laravel / database中设置关系后,可以轻松检索相关信息。

例如,如果要使用userrole检索用户,则需要编写:

$users = \App\Models\Users::with(['userrole'])->first();

如果您想获得用户角色名称,请写下:

$users->userrole->role->rolename; 
/* here rolename the column name you have in role table for role name*/

现在来看你的问题:你想要选择那些只有角色ID为12的用户。现在以简单的格式编写它变得很简单。

$users = \App\Models\RoleUser::where('role_id', 12)->with(['user', 'role'])->get(); 
/* Here role_id is the column you have in role_user table as reference for role table */

您可以在此处了解详情:https://laravel.com/docs/5.6/eloquent-relationships

答案 1 :(得分:1)

要以雄辩的格式运行相同的数据库查询,您必须执行以下操作:

  1. 您应该创建一个用户模型,如果您启用了laravel身份验证,则可以使用项目创建该模型,您可以在here上阅读更多内容。如果没有,你必须创建你的模型。
  2. 要在控制器或类中使用模型,您必须在php文件中启用它:

    use App\User;

  3. 像这样运行对用户模型的引用。

    $users = User::join('role_user','users.id', '=', 'role_user.user_id') ->join('roles', 'roles.id', '=', 'role_user.role_id') -> where('roles.id', '=', 12) ->get();

  4. $ users现在将成为一个集合,并受制于集合中可用的所有优秀方法。

    我建议花点时间浏览laracast的免费视频教程,以真正理解Model与Eloquent的使用方式。此外,还可以查看开箱即用的Auth功能。我倾向于使用Auth对角色进行所有调用。希望这可以帮助。

答案 2 :(得分:0)

这将为角色ID为12的用户提供:

User::whereHas( 'roles', function ( $query ) {
            $query->where( 'id', 12 );
        } )->get();

我认为你正确地建立了关系。

如果你想动态传递$ role_id,请使用以下命令:

User::whereHas( 'roles', function ( $query ) use ($role_id) {
            $query->where( 'id', $role_id );
        } )->get();

答案 3 :(得分:0)

在角色模型中,您应该添加此

public function users()
{
    return $this->hasMany('App\Models\User','role_id','id');
}

在控制器

$allusrs = Role::with('users')->where('id','=','12');
dd($allusrs);