表格结构:
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 :(得分: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