第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

三個表之間的Laravel關(guān)系

三個表之間的Laravel關(guān)系

PHP
BIG陽 2021-05-06 14:16:16
我有3張桌子:大事記時(shí)代圖書我通過以下方式將它們關(guān)聯(lián)起來:年齡ID名稱圖書ID標(biāo)題age_bookIDage_idbook_id大事記ID名稱event_ageIDevent_idage_idevent_age_bookevent_age_idbook_id基本上,一本書可以有很多年齡,一個年齡可以有很多本書,一個事件可以有很多年齡,一個事件可以有很多本書。我的事件模型如下所示,可以很好地獲得所有事件的年齡class Event extends Model{    public function ages()    {        return $this->belongsToMany(Age::class, 'event_age');    }}年齡模型:class Age extends Model{    public function books(): BelongsToMany    {        return $this            ->belongsToMany(Book::class)            ->withTimestamps();    }}書本模型class Book extends Model{    public function ages(): BelongsToMany    {         return $this            ->belongsToMany(Age::class, 'book_age', 'book_id','age_id')            ->withTimestamps();    }}我在弄清楚如何獲得所有版本的年齡書籍時(shí)遇到麻煩,是否可以在Event模型上進(jìn)行操作?
查看完整描述

1 回答

?
幕布斯7119047

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。


查看完整回答
反對 回復(fù) 2021-05-21
  • 1 回答
  • 0 關(guān)注
  • 215 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號