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 Joins 是如何工作的吗?

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

原文由 xiimoss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 378
2 个回答

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

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

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

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

原文由 Avram 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 user1669496 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题