如何从急切加载中获取连接的表值?

时间:2016-04-06 19:46:30

标签: json laravel-5.2 eager-loading

我正在研究Laracasts关于egar loading的视频,到目前为止一直很好!

我认为我很好地掌握了这些概念,但现在我已经习惯了以前的做法(CodeIgniter)与这种非常棒的方式。

我有3张桌子:

cards        #card_id, title, created_at, updated_at
notes        #note_id, name, created_at, updated_at
card_notes   #card_id, note_id

card_notes内有FK字段:

card_id  #FK back to cards->card_id
note_id  #FK back to notes->note_id

我能够获得给定卡片的所有笔记:

CardsController.php

public function show(Card $card)
{
    $card->load('notes');
}

Card.php

public function notes()
{
    return $this->hasMany(CardNote::class);
}

JSON

{
    id: 1,
    title: "First Card",
    created_at: null,
    updated_at: null,
    notes: [
        {
            card_id: 1,
            note_id: 1,
            created_at: null,
            updated_at: null
         },
         {
            card_id: 1,
            note_id: 2,
            created_at: null,
            updated_at: null
         }
     ]            
}

到目前为止,真好! 现在,在我的notes表格中,我想要显示一个name列。这是我被困的地方。我能够进入我的查找表,但我还没弄明白如何将过去该表并进入连接表。看起来我需要hasManyThrough,但是......我的脸在我的脸上。

return $this->hasManyThrough(Note::class, CardNote::class);

我需要获取给定note_id的所有记录记录,但我不确定如何深入到下一级别。这就是我最终想要产生的东西:

JSON

{
    id: 1,
    title: "First Card",
    created_at: null,
    updated_at: null,
    notes: [
        {
            card_id: 1,
            note_id: 1,
            name: "John Doe"
            created_at: null,
            updated_at: null
         },
         {
            card_id: 1,
            note_id: 2,
            name: "Jane Doe"
            created_at: null,
            updated_at: null
         }
     ]            
}

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

如果你继续滚动,它会有所帮助。我知道我和hasManyThrough很接近,我只是错过了可选参数。

return $this->hasManyThrough(Note::class, CardNote::class, 'card_id', 'note_id');