2016-08-12 11 views
1

私は通常、自分のコントローラのすべてのクエリを保存するリポジトリディレクトリを作成します。私の質問は、雄弁なモデルやdb :: facadeを使う方が良いですか?私のプロジェクトを通して、通常Laravel 5.2 Eloquent

、私は両方を使用しますが、時にはそれが乱雑になります

public function getUsersLanguagues($user_id) 
    { 
     $query = DB::table('languages as l') 
      ->select('l.name') 
      ->leftJoin('language_user as lu', 'l.id', '=', 'lu.language_id') 
      ->where('lu.user_id', $user_id) 
      ->get(); 

     return $query; 
    } 

    public function getUsersLanguagues($user_id) 
    { 
     return Languages::select('languages.name') 
      ->leftJoin('language_user as lu', 'languagues.id', '=', 'lu.language_id') 
      ->where('lu.user_id', $user_id) 
      ->get(); 
    } 

私は彼らの両方がバックオブジェクト、コレクション、などのさまざまな種類を持って知っている...しかし、私はあると思いまして使用するのに最適な方法、または使用するのに推奨される方法。前もって感謝します。

+0

しかし、あなたは本当に、少なくともないあなたがそれらを異なる見えるようにしようとしているように、いずれの例では雄弁を使用していません。とにかくモデルを使用していて、クエリビルダーをそのインスタンスの戻り値に適用するだけです。 – Ohgodwhy

+1

彼はEloquent vs Query Builderとの比較が必要だと思います。私の意見では、Eloquent ORMはあなたに多くの「魔法」を与えますが、複雑なクエリがある場合などです。フルテキスト検索クエリを使用すると、自分のクエリを作成する必要があります。そして、この点に関して、パフォーマンス、可読性、などのいくつかの比較があります。それらを見てください。 – haitran

答えて

1

提供されている例では、大きな違いは見られません。最後に、多くの特性を共有しているDatabase's Query BuilderEloquent's Query Builderを使用しています。実際、Eloquentは多くの方法でデータベースのクエリビルダを挿入しています。 Laravel 5.2 official documentationから

:あなたが流暢にモデルに関連付けられているデータベーステーブルを照会することができます強力なクエリビルダーとして各雄弁モデルの

と思います。

# An example adapted to your needs 
LanguagesUsers::where('user_id', $user_id)->first()->languages 

ご希望の場合は同じこの方法で達成することができます:私はそれらの間の最もsignificantsの違いの一つは、あなたが雄弁との関係からデータをもたらすことができる方法だと思い


# languages_users is the name you may give to your relation in your model 
Languages::whereHas('languages_users', function ($query) { 
    $query->where('user_id', $user_id); 
})->get(); 

少なくとも私の観点から見ると、Eloquentは参加するよりもはるかに説明的です。

もっと重要な違いがありますが、Eloquentはデータベースのクエリビルダよりも優れています。そのためには、できる限りEloquentを使うことをお勧めします。最後の解説として


は、気づくことlaravel 5.3以降、データベースの Query Builder will return collections、雄弁と同じ。だからそれはもはや違いではないでしょう。

+0

レスポンスありがとう、laravel 5.3でクエリービルダーがコレクションを返すことを知らなかった、間違いなくマイグレーションされている、ありがとう。 – Carlos