我有3个模特
用户
事件
EventUser(表示加入带评论的活动的用户)
我们想做$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的方法呢?
答案 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();
将使用数据透视表的注释字段检索事件关系,如您所愿。