我有一个名为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
输出:
如果通过事件将事件名称添加到成员资料中,我还想输出如果存储在关系表中的事件名称。以上仅显示直接添加到会员的奖励详情。
在我的关系表中,来自某个事件的条目类似于:
输入事件名称后如何输出?
答案 0 :(得分:1)
我想当你拥有如此复杂的支点时,也许它可以保证自己是一个模特。事实上,如果你考虑一下,你的Award
就是一种奖励,可以在不同情况下多次获得。某个时刻通过某个事件授予某人奖励......这是一个不同的概念。
假设您正在为库开发系统。你通常会有一本书的模型(标题,作者等)和另一本书#Book; 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);
}