Laravel多对多方法问题

时间:2016-05-25 12:25:42

标签: laravel laravel-5.2

我在模型User&amp ;;之间存在多对多的关系。通知。

用户模型:

public function notifications()
{
    return $this->belongsToMany('Yeayurdev\Models\Notification', 'notifications_user', 'user_id', 'notification_id')
        ->withPivot('notifier');
}

通知模型:

public function user()
{
    return $this->belongsToMany('Yeayurdev\Models\User', 'notifications_user', 'notification_id', 'user_id');
}

数据透视表:

ID     USER_ID     NOTIFICATION_ID
1         2               1

在我看来,我为用户检索了所有通知的列表。

@foreach (Auth::user()->notifications as $notification)
   {{ $notification->user->username }}
@endforeach

问题在于,当我尝试使用该通知获取用户的用户名时,我收到错误未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ username。 "用户名"是我的users表上的列,它只是一个字符串。我不知道我哪里出错了,因为如果我只是做了#not; notificatin-> user"它给了我收藏。

谢谢!

1 个答案:

答案 0 :(得分:6)

正如你所说,这种关系是多对多关系,因此在你的情况下,$ notification->用户将返回一组User模型,而不是单个用户。如果您只需要第一个用户,那么只需

{{ $notification->user()->first()->username }}

如果您需要为每个通知打印出所有用户,那么您需要在此处循环以浏览所有用户。

@foreach (Auth::user()->notifications as $notification)
    @foreach($notification->user as $notificationUser)
        {{ $notificationUser->username }}
    @endforeach
@endforeach

我建议将user()关系重命名为users()以避免将来混淆。