2017-01-12 12 views
2

私は現在、Laravelフレームワークを使用するように変更しているPHPバックエンドを持っています。しかし、私はLaravel内部結合がどのように動作するかについてはあまりよく分かりません。Laravel Innerに参加しませんか?

私はLaravelに上に移動しようとしているSQLクエリは次のとおりです。

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

誰かがLaravelが作業に参加する方法を説明することはできますか?

この質問が適切でない場合はお詫び申し上げます。

答えて

9

:あなたはたとえばforeachを使用して、それを反復処理することができるように

$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オブジェクトのインスタンスになります。

結合のタイプを指定するjoin()関数に5番目の引数を渡すことができます(デフォルトは "inner"です)。

あなたが雄弁を使用し、「リーグ」のモデルを持っている場合は、あまりにもモデルに参加使用することができ、その後:この場合

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

を、$leaguesは、通常のLaravelコレクションを拡張しIlluminate\Database\Eloquent\Collectionのインスタンスになりますと、定期的なコレクションよりも少し機能が充実しています。

しかし、使用せずにこれを書くためのより簡単な方法があり参加している:

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

注意をこの例では、「国」は、テーブル名が、Eloquent relationship nameではありませんので、あなたがあなたの関係を設定する必要があることこのアプローチを使用する前に

また、joinを使用する代わりに、この例では2つのクエリまたはネストされたクエリを使用しますが、わかりません。 SELECT league_name FROM leagues WHERE country_id IN (SELECT id FROM countries WHERE country_name='$country')

+0

一番うまくいって乾杯! – xiimoss

3

これはかなり簡単です。クエリビルダーを使用してクエリを表示する方が意味があるかもしれません。それはこのような何か(テストしていない)でなければなりません

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

ここでエラーがありますが、テーブル(結合ステートメント内)は「リード」ではなく「リーグ」ではありません:) – Avram

+0

うわー、ありがとう、私はそれを修正しました。 – user3158900

関連する問題