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

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?

图片转代码服务由CSDN问答提供 功能建议

我的用户模型中有以下关系

  public 函数事件($ user_id)
 {
 
返回$ this-> find($ user_id) - > hasManyThrough('Event','Event_Member','user_id','id'); 
} \  n   
 
 

三个表

用户

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

事件

  id | name | location  
1 | meeting | office 
   
 
 

Event_Member

  user_id | event_id | status 
1 | 1 | Owner \  n2 | 1 | Guest 
   
 
 

hasManyThrough关系为我提供了Event表中的信息,但我还需要来自数据透视表的状态信息,这怎么可能是 完成了?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

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;
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题