如何获取具有角色的 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 具有 users 和 role 具有列 '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()
。
您好,我有一个 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 具有 users 和 role 具有列 '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()
。