雄辩地结合2 x表的数据?

时间:2015-05-27 15:57:08

标签: laravel laravel-4 eloquent laravel-5

表格结构:

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();

然后我需要从我的数据库中获取所有游戏,但包括奖励表中的数据。

我希望有一个数组,我可以循环输出游戏,如果游戏有奖励 - 输出也是。

正确的雄辩声明是什么?

1 个答案:

答案 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