Laravel HasManyThrough在这种情况下不起作用怎么办?

时间:2015-08-03 23:08:06

标签: php laravel laravel-5 eloquent relationship

我有3个模特

用户

  • ID

事件

  • ID
  • END_TIME

EventUser(表示加入带评论的活动的用户)

  • USER_ID
  • event_id的
  • 评论

我们想做$user->events (列出用户已加入的所有活动的活动详情)

但是,正如您所看到的,中间表是一个数据透视表...因此事件表不引用它(这是hasManyThrough函数的第四个参数)。

例如,我可能希望为已结束的用户加入的所有活动获取详细信息

目前我在用户模型中执行此操作

private function eventQuery() {
  return Event::join('event_user', 'events.id', '=', 'event_user.event_id')
         ->where('user_id', $this->id); // event_user.user_id
}

public function events() {
  return $this->eventQuery()->get();
}

public function pastEvents() {
  return $this->eventQuery()
         ->where('end_time', '<', new \DateTime()) // events.end_time
         ->get();
}

但在这种情况下,有没有类似于hasManyThrough的方法呢?

1 个答案:

答案 0 :(得分:0)

laravel方式是:

用户模型:

public function events()
{
return $this->belongsToMany('App\Event')->withPivot('comment');
}

活动模型:

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

当您致电:

$user = App\User::whereId($id)->where('end_time','<=',$now)->with('events')->get();

将使用数据透视表的注释字段检索事件关系,如您所愿。