Laravel Eloquent"多对多对一?"

时间:2015-06-07 20:33:21

标签: laravel laravel-5

我的数据库架构:

user:
    - id
    - email
    ...

notification_user:
    - user_id
    - notification_id

notifications:
    - id
    - channel_id
    - message
    ...

channels:
    - id
    - name
    ...


用户模型:

public function notifications()
{
    return $this->belongsToMany('App\Notification');
}


通知模型:

public function users()
{
    return $this->belongsToMany('App\User');
}


有什么问题: App\User::find(1)->notifications显示属于此用户的所有通知,并且工作正常,但我还需要包含channels表中的数据。

<App\Notification #000000004e6906c1000000014ed0d97c> {
   id: 20,
   channel_id: 3,
   message: "...",
   created_at: "2015-05-31 17:37:12",
   updated_at: "2015-06-07 10:37:12",
   pivot: <Illuminate\Database\Eloquent\Relations\Pivot #000000004e690718000000014ed0d97c> {
       user_id: 1,
       notification_id: 20
   }
},

以上是修补匠的输出。 问题是:如何为channels表格中包含每个通知的数据。

2 个答案:

答案 0 :(得分:1)

Channel模型与Notification模型之间建立一对多的关系。

通知模型:

public function users()
{
    return $this->belongsToMany('App\User');
}

public function channel()
{
    return $this->belongsTo('App\Channel');
}

香奈儿模特:

public function notifications()
{
    return $this->hasMany('App\Notification');
}

然后您可以访问每个通知的频道。

$channel = $notification->channel;

答案 1 :(得分:1)

Channel模型添加Notification关系。

public function channel()
{
    $this->belongsTo('App\Channel');
}

然后您可以使用下面的频道加载通知。

App\User::with('notifications', 'notifications.channel')->find(1)