嗨,我有一个创建用户记录的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
答案 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()
。