Laravel 多对多关系 5 个表

Posted

技术标签:

【中文标题】Laravel 多对多关系 5 个表【英文标题】:Laravel Many to Many Relationship 5 tables 【发布时间】:2016-12-20 00:04:21 【问题描述】:

我有一个模型叫做 Members,另一个叫做 Awards,另一个叫做 Events。

每个成员可以多次获得多个奖项,每个奖项可以分配给多个成员,这些奖励可以在成员个人资料中授予,也可以作为活动的结果。

我的会员模型关系:

public function Awards()
    
        return $this->belongsToMany('App\Award', 'award_members', 'member_id', 'award_id')
                    ->withTimestamps()
                    ->orderBy('award_members.created_at','desc');
    

我的关系表:

Schema::create('award_members', function (Blueprint $table) 
            $table->increments('id');
            $table->integer('user_id');
            $table->integer('club_id');
            $table->integer('award_id');
            $table->integer('member_id');
            $table->integer('event_id')->nullable();
            $table->timestamps();
        );

我的视图输出:

@foreach($member->Awards as $a)
   $a->title  |  $a->pivot->created_at 
@endforeach

这个输出:

一等奖 | 2016 年 12 月 8 日 奖2 | 2016 年 12 月 8 日 一等奖 | 2016 年 11 月 8 日

如果存储在关系表中,我还想输出通过事件添加到成员配置文件中的事件名称。以上仅显示直接添加到会员的奖励详情。

在我的关系表中,来自事件的条目看起来类似于:

id = 4 user_id = 1(与用户表相关) club_id = 1(与俱乐部表相关) award_id = 3(与奖励表相关) member_id = 1(与成员表相关) event_id = 1(与事件表相关但可以为NULL)

输入事件名称如何输出?

【问题讨论】:

能否详细说明您要检索的内容? 据我了解,您想检索关系表中有关事件名称的所有详细信息。对吗? @jaysingkar 抱歉,有几种方法可以直接在他们的个人资料中或从活动中向会员授予奖励。如果直接在他们的个人资料中授予奖励,则不会存储任何事件 ID,但是当在下一个事件中授予奖励时,将存储该事件的 ID。我要做的是在 foreach 循环中查看成员个人资料上的所有奖项,如果其中一个奖项与活动相关联,则显示活动名称 好的。你能把你的方法发布到你要检索数据的地方吗 @jaysingkar 当然,因为所有奖项都与会员有关,所以 $member = Member::FindOrFail($id);以典型的表演方式。 【参考方案1】:

我想当你有如此复杂的枢轴时,也许它本身就是一个模型。其实仔细想想,你的Award是一种奖励,在不同的情况下可以多次获得。在某个时刻,通过某个事件授予某人一个奖项……这是一个不同的概念。

假设您正在为图书馆开发一个系统。您通常会有一个模型用于一本书(标题、作者等),另一个用于“BookCopy”或“BookExemplar”,代表它的每个物理副本。当用户拿走一本书时,他们实际上是在拿走副本。

所以我想说

// Member.php
public function Awards()

    return $this->hasMany(AwardGrant::class);


// AwardGrant.php
public function Award()

    return $this->belongsTo(Award::class);


public function Event()

    return $this->belongsTo(Event::class);

【讨论】:

以上是关于Laravel 多对多关系 5 个表的主要内容,如果未能解决你的问题,请参考以下文章

EntityFramework同一张表多对多关系

laravel 如何在多对多关系中分配给用户?

Laravel 8 多对多关系不起作用(没有抛出错误)

在 Laravel 中填充具有多对多关系的表

在事件监听器中同步多对多关系(Laravel 5.7)

Laravel 5 雄辩的多对多关系问题