2015-05-27 37 views
-2

表結構:雄辯地結合來自2個表格的數據?

games 

id | name 

awards 

id | award name | game_id (fk) 

關係

一個遊戲可以有很多的獎項。 一個獎項有一個遊戲。

class Games extends Model 
{ 
    public $timestamps = false; 

    public function awards() 
    { 
     return $this->hasMany('award'); 
    } 
} 

我需要從我的數據庫中獲取所有遊戲。我做到這一點使用:

Game::all(); 

然後我需要讓所有的遊戲我的數據庫,但包括來自獎項表中的數據。

我想要一個數組,我可以循環輸出遊戲,如果遊戲有獎勵 - 也輸出這個。

什麼是正確的雄辯聲明?

+0

您與'''遊戲/遊戲''不一致。修復這個!怎麼樣'''Games :: with('awards') - > get()'''? – ArjanSchouten

+0

你在使用命名空間嗎? – user3158900

回答

2

Laravel的關係對於這類事情來說很棒。到目前爲止,你所擁有的一切都在正確的道路上。

// Controller 
public function index() 
{ 
    $games = Game::all(); 

    return view('games.index', compact('games')); 
} 

// View 
@foreach($games as $game) 

    {{ $game->name }} 

    @if(count($game->awards) > 0) 
     // Game has some awards, lets loop through them 

     @foreach($game->awards as $award) 
      {{ $award->name }} 
     @endforeach   

    @endif 

@endforeach 

使用關係你已經安裝在你的Game模型,你可以立即從其他表獲取相關數據。現在,每次您撥打$game->awards它都會查詢數據庫,但是使用Laravel的Eager Loading,您可以同時將所有這些信息取出,而不是根據需要。

// Controller 
public function index() 
{ 
    $games = Game::with('awards')->get(); 

    return view('games.index', compact('games')); 
} 

和做同樣的事情在視圖中你想要獲得遊戲獎勵,因爲他們已經被從數據庫中讀取每次不再運行一個新的查詢。更多有關在這裏急切加載http://laravel.com/docs/5.0/eloquent#eager-loading

+0

很好的答案!只是一個簡短的問題 - 緊湊是什麼? – panthro

+0

很好的回答!只是一個簡短的問題 - 緊湊是什麼? – panthro

+0

@panthro [Here](http://goo.gl/aaSu3v)你可以找到解釋 –