douqin2108 2015-09-13 15:12
浏览 48
已采纳

Eloquent hasManyThrough也获得数据透视表记录

I have the following relation in my Users model

public function events($user_id)
{

    return $this->find($user_id)->hasManyThrough('Event', 'Event_Member', 'user_id', 'id');
}

And the three tables

User

id|name|...
1 |bob |
2 |mike|

Event

id|name   |location
1 |meeting|office

Event_Member

user_id|event_id|status
1      |1       |Owner
2      |1       |Guest

The hasManyThrough relationship gives me the information from the Event table, but I also need the status information from the pivot table, how can this be done?

  • 写回答

1条回答 默认 最新

  • doulin8374 2015-09-13 15:21
    关注

    What you have looks like a many-to-many relation rather than a has-many-through one. You have two tables connected through a pivot, not three parent-child-grandchild tables.

    I would strongly suggest changing the relationship in both models. In the user model, it would look like this:

    public function events()
    {
        return $this->belongsToMany('Event', 'event_members');
    }
    

    Note that a pivot table is typically called model1_model2 in alphabetical order - that is, event_user in this case. I assumed your pivot table is called event_members, if not just change it. Also note that I removed the user_id since the user model already knows which user it's using.

    Then you can access pivot data easily, e.g. like this:

    foreach ($user->events as $event) {
        echo $event->pivot->status;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?