如何获得具有角色的用户创建的记录

时间:2018-07-19 14:43:27

标签: laravel eloquent role

嗨,我有一个创建用户记录的user_id表“ fiches”。 我所有的用户都有一个role_id。

我如何获得所有user_id具有'admin'角色或其他角色的“ fitch”。

 User.php
 class User extends Authenticatable{

     public function role()
     {
         return $this->belongsTo(Role::class);
     }

     // Fiches of User
     public function fiches()
     {
         return $this->hasMany(Fiche::class);
     }

  }


 Fiche.php
 class Fiche extends Model{

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

 }

我的查询

 $fiches = Fiche::whereDay('created_at', '=', date('d'))->where('status', '=', 'A Ecouter')->pluck('id')->count();

Fiches表(id,user_id,名称,状态,created_at)

用户表(id,role_id,名称,created_at)

我想拥有由角色==管理员创建的Fiches

1 个答案:

答案 0 :(得分:0)

您需要使用带有嵌套关系的whereHas。假设您的roles表具有列type,代码将如下所示:

$fiches = Fiche::whereHas('user.role', function ($query) {
    $query->where('type', 'admin');
})->get();

此查询将检索所有具有用户且具有 role 且其“类型”列值为“ admin”的用户

编辑:

对于您在注释中提供的特定情况,查询应如下所示:

$fichesAEcouterJours = Fiche::whereDay('created_at', '=', date('d'))
    ->where(function ($query) {
        $query->where('status', '=', 'A Ecouter')
            ->orWhere('status', '=', 'A Reporter');
    })
    ->whereHas('user.role', function($query){ 
        $query->where('name', 'agent'); 
    })
    ->count();

或者您也可以使用->whereIn('status', ['A Ecouter', 'A Reporter'])。请注意,在这种情况下,无需在->get()之前调用->count()-与所有行的SELECT COUNT集合和调用相比,让Eloquent生成->get()查询更快该集合的->count()

相关问题