Laravel Inner加入?

时间:2017-01-12 19:34:30

标签: php laravel

我有一个PHP后端,我正在改变使用Laravel框架。但是,我不太确定Laravel内连接是如何工作的。

我试图转移到Laravel的SQL查询是:

"SELECT leagues.league_name FROM leagues INNER JOIN countries on leagues.country_id = countries.country_id WHERE countries.country_name = '$country' "

有人能够解释Laravel如何加入工作吗?

如果这个问题不适合,请道歉。

3 个答案:

答案 0 :(得分:18)

它应该是这样的(未经测试):

$leagues = DB::table('leagues')
    ->select('league_name')
    ->join('countries', 'countries.country_id', '=', 'leagues.country_id')
    ->where('countries.country_name', $country)
    ->get();

$leagues将是Illuminate\Support\Collection对象的实例,因此您可以使用foreach对其进行迭代。

您可以将第5个参数传递给join()函数,该函数将指定连接类型(默认为“内部”)。

如果你正在使用Eloquent并拥有“League”模型,那么你也可以在模型上使用join:

$leagues = League::select('league_name')
    ->join('countries', 'countries.country_id', '=', 'leagues.country_id')
    ->where('countries.country_name', $country)
    ->get();

在这种情况下,$leagues将是Illuminate\Database\Eloquent\Collection的一个实例,它会扩展常规的Laravel集合,并为您提供比常规集合更多的功能。

但是,有一种更简单的方法可以在不使用连接的情况下编写它:

$leagues = League::select('league_name')->whereHas('countries', function($query) use ($country) {
    $query->where('country_name', $country);
})->get();

请注意,在此示例中,“countries”不是表名,而是Eloquent relationship name,因此您需要在使用此方法之前设置关系。

此外,这个例子不是使用join,而是使用两个查询,或者是嵌套查询,我不确定;但是这样的话:SELECT league_name FROM leagues WHERE country_id IN (SELECT id FROM countries WHERE country_name='$country')

答案 1 :(得分:3)

这很简单,也许只使用查询构建器查看您的查询会更有意义。

$results = DB::table('leagues')
    ->join('countries', 'leagues.country_id', '=', 'countries.country_id')
    ->where('countries.country_name', $country)
    ->get();

答案 2 :(得分:0)

在Laravel Eloquent中,您可以非常聪明地完成所有操作。

parent_table_model::with('relational_table_model')->get();