1 回答

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個贊
讓我們回顧一下關(guān)系
似乎您只需要3個模型和5個表。
屬于時(shí)代的書籍
歷代盛事
年齡屬于書籍
年齡屬于事件
您的其他模型還可以,但是您的年齡模型缺少與Event的關(guān)系:
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();
書籍和活動
因此,我認(rèn)為您不想要age_event_book
。我認(rèn)為您真正想要的是:
活動屬于圖書
書籍屬于活動
這樣
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
有用的提示
您正在提供關(guān)系表,您必須這樣做,因?yàn)槟鷽]有遵循聯(lián)接表的命名約定。約定是要加入的類應(yīng)按字母順序列出。所以age_event代替event_age。
- 1 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報(bào)