我有一个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' "
Run Code Online (Sandbox Code Playgroud)
有人能够解释Laravel如何加入工作吗?
如果这个问题不适合,请道歉.
Avr*_*ram 21
它应该是这样的(没有测试过):
$leagues = DB::table('leagues')
->select('league_name')
->join('countries', 'countries.country_id', '=', 'leagues.country_id')
->where('countries.country_name', $country)
->get();
Run Code Online (Sandbox Code Playgroud)
$leagues将是Illuminate\Support\Collection对象的实例,因此您可以使用foreach例如迭代它.
您可以将第5个参数传递给join()将指定连接类型的函数(默认为"inner").
如果您正在使用Eloquent并拥有"League"模型,那么您也可以在模型上使用join:
$leagues = League::select('league_name')
->join('countries', 'countries.country_id', '=', 'leagues.country_id')
->where('countries.country_name', $country)
->get();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,$leagues将是一个实例Illuminate\Database\Eloquent\Collection扩展常规Laravel集合,并为您提供比常规集合更多的功能.
但是,有一种更简单的方法可以在不使用连接的情况下编写它:
$leagues = League::select('league_name')->whereHas('countries', function($query) use ($country) {
$query->where('country_name', $country);
})->get();
Run Code Online (Sandbox Code Playgroud)
请注意,在此示例中,"countries"不是表名,而是Eloquent关系名,因此您需要在使用此方法之前设置关系.
此外,这个示例将使用两个查询,或嵌套查询,而不是使用连接,我不确定; 但是像这样:SELECT league_name FROM leagues WHERE country_id IN (SELECT id FROM countries WHERE country_name='$country')
这很简单,也许只是使用查询生成器查看查询会更有意义。
$results = DB::table('leagues')
->join('countries', 'leagues.country_id', '=', 'countries.country_id')
->where('countries.country_name', $country)
->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45451 次 |
| 最近记录: |