[mysql]Eloquent hasManyThrough 也获得数据透视表的记录

标签: MySQL PHP laravel
发布时间: 2017/4/9 23:18:40
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

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

public function events($user_id)
{

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

和三个表

用户

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

事件

id|name   |location
1 |meeting|office

Event_Member

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

HasManyThrough 关系给我的信息从事件表,但我还需要从数据透视表的状态信息,怎么可以这样做吗?

解决方法 1:

你有什么看起来像一个多对多关系,而不是有-多-通过一个。你有两个表通过一个支点,不三个父-子-孙子表连接在一起。

我强烈建议改变了两个模型中的关系。在用户模式中,它会看起来像这样︰

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

请注意,数据透视表通常称为 model1_model2 按字母顺序-那就是, event_user 在这种情况下。我假设您的数据透视表称为 event_members ,如果不只是改变它。此外需注意,我删除了 user_id 由于用户模型已经知道哪些用户正在使用。

然后您可以访问数据透视表很容易,例如像这样︰

foreach ($user->events as $event) {
    echo $event->pivot->status;
}
官方微信
官方QQ群
31647020