1 回答
TA贡献1794条经验 获得超8个赞
让我们回顾一下关系
似乎您只需要3个模型和5个表。
属于时代的书籍
历代盛事
年龄属于书籍
年龄属于事件
您的其他模型还可以,但是您的年龄模型缺少与Event的关系:
class Age extends Model
{
public function books(): BelongsToMany
{
return $this->belongsToMany(Book::class)
->withTimestamps();
}
public function events(): BelongsToMany
{
return $this->belongsToMany(Events::class,'event_age')
->withTimestamps();
}
}
这将允许:
$books->ages;
$events->ages;
$ages->book;
$ages->events;
和链接...
$books = collect();
foreach($event->ages as $age){
$books->merge($ages->books);
}
$books->unique();
书籍和活动
因此,我认为您不想要age_event_book
。我认为您真正想要的是:
活动属于图书
书籍属于活动
这样
book_events
- id
- book_id
- event_id
- age_id
而且您会在书中:
public function events()
{
return $this->BelongsToMany('App\Event')
->withTimestamps()
->withPivot('age_id');
}
并且在情况下:
public function books()
{
return $this->belongsToMany('App\Book')->withTimestamps()
->withPiviot('age_id')->groupBy('age_id');
}
给你:
$event->books
$book->events
在前端
在前端,我需要获取最新的事件,并按年龄分组书籍,并且书籍可以属于一个以上的年龄
$event = Event::latest();
$books = $event->books();
然后放在刀片上
@foreach($books as $age_id => $books)
<h4>{{Age::find($age_id)->name}}</h4>
@foreach($books as $book)
<div>$book->name</div>
@endforeach
@endforeach
有用的提示
您正在提供关系表,您必须这样做,因为您没有遵循联接表的命名约定。约定是要加入的类应按字母顺序列出。所以age_event代替event_age。
- 1 回答
- 0 关注
- 198 浏览
添加回答
举报