如何获取具有角色的 created_by 用户的记录

How can I get records created_by user with role

您好,我有一个 table "fiches" 和创建记录的 user_id。 我所有的用户都有 role_id.

如何获得所有 "fiches",其中 user_id 具有 'admin' 或其他角色。

 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 table (id, user_id, name, status, created_at)

用户table(id,role_id,姓名,created_at)

我想要由角色 == Admin 创建的 Fiches

您需要在嵌套关系中使用 whereHas。假设您的 roles table 列有 type 代码将如下所示:

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

此查询将检索所有 fiches 具有 usersrole 具有列 'type' 的价值 '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'])。请注意,在这种情况下,无需在 ->count() 之前调用 ->get() - 让 Eloquent 生成 SELECT COUNT 查询比 ->get() 集合更快所有行并调用该集合的 ->count()