我正在尝试使用eloquent检索最后5条消息并将其显示在仪表板上。
问题是,我需要根据用户>角色获取这些消息。但该消息链接到更新日志。此更新日志用于分发每个仪表板消息,短信通知和电子邮件。
它是如何运作的:
用户
public function role()
{
return $this->belongsTo(Role::class);
}
作用
public function updatelogs()
{
return $this->belongsToMany(Updatelog::class, 'role_updatelog');
}
public function users()
{
return $this->hasMany(User::class);
}
Updatelog
public function roles()
{
return $this->belongsToMany(Role::class, 'role_updatelog');
}
public function dashboard_message()
{
return $this->hasOne(DashboardMessage::class);
}
DashboardMessage
public function updatelog()
{
return $this->belongsTo(Updatelog::class);
}
我尝试过:
$dashmessages = DashboardMessage::with(array('updatelog' => function($q) use($user) {
$q->with(array('roles' => function($q2) use($user) {
$q2->whereHas($user->role_id);
}));
$q->whereHas('institution');
}))->with('updatelog.institution.rate_grids')->orderBy('updated_at', 'DESC')->take(5)->get();
我在没有角色约束的情况下获得了最后5个DashboardMessages。我做错了什么?
修改------------------------------------------- -------- 我只是尝试了别的东西而且效果很好:
$updatelog = Updatelog::whereHas('roles', function ($query) use($user) {
$query->where('role_id', $user->role_id);
})
->whereHas('dashboard_message')
->with('dashboard_message')
->whereHas('institution')
->with('institution')
->with('rate_grid')
->take(5)->get();