Laravel 5.3:渴望加载多对多的关系

时间:2017-01-26 20:04:37

标签: eloquent many-to-many laravel-5.3


我正在尝试使用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();

0 个答案:

没有答案