2016-04-29 8 views
1

Laravelでデータベースクエリを書き込むには、どのような場所が適していますか?Laravelデータベースの使用:どこに配置する必要がありますか?モデルやコントローラでは?

コントローラまたはモデルでは?

私が正しいとする方法教えてください:

は、このようなコントローラで使用していますか?このようなモデルで使用

<?php 
    namespace App\Http\Controllers; 

    use Illuminate\Http\Request; 

    use DB; // <-------- 

    use App\Http\Requests; 
    use App\Http\Controllers\Controller; 

    class UsersController extends Controller 
    { 
     public function getUser() 
     { 
      return DB::table('users')->where('name', 'John')->value('email'); 
     } 
    } 

または上記のうちどれですか?

答えて

0

あなたのクエリを置く場所のトピックは、一般的なものです。それは最終的にあなたの個人的な好みとあなたの特定の状況になります。

他の場所でクエリを再利用する必要がある場合は、モデル内にクエリを配置することをお勧めします。ただし、このオプションを使用すると問題が発生する可能性があることを警告する必要があります。の場合は、のクエリがアプリケーション内の複数の場所で使用されます。

クエリを再利用する必要がない場合は、コントローラ内に配置してください。この方法では、コントローラのメソッドを変更したり壊したりするクエリについて心配する必要はありません。

質問に答えるには、クエリを配置する明確な場所はありません。私が示唆できるのは、あなたのソリューションを過度に複雑化させないことであり、すべてのクエリを1つのパターンにまとめようとはしません。

あなたが提供した2つの例には他にもオプションがあります。

2

学問的には、すべてのデータベースのロジックをモデル内に保持する方がよいでしょう。しかし、実際には、コントローラ内で簡単なクエリを保持し、繰り返しのためにscopesを使用する方がより便利です。この場合、コードをより読みやすく、保守しやすくなります。また、すべてのLaravelの書籍は同じことを示唆しています。

とにかくそれはより多くの意見に基づいています。

+0

だから、選択肢は私が次のとおりです。これらの詳細については、これらのビデオをチェックアウト? –

+0

私は、私のためではなく、あなたのためにもっと良い答えを与えることができますが、いくつかの初心者のために、私は人々にこれをより良い説明を例に挙げて待っています。 –

+2

選択肢は常にあなたのものですが、コミュニティーから受け入れられた慣行からは遠く離れません。 *あなたのコードを維持する人があなたがどこに住んでいるかを知っている暴力的な精神病者であるかのように常にコードしてください* John Woods –

1

ここでの使用方法は、実際にはスコープを使って解決しています。

use Illuminate\Eloquent\Database\Builder; 
use Illuminate\Eloquent\Database\Model;  

class User extends Model 
{ 
    // Did you know that if your model name is the singular version of your table name, you don't need to include this? 
    protected $table = 'users'; 

    public function scopeForName(Builder $query, $name) 
    { 
     return $query->where('name', $name); 
    } 
} 

そして今、使用量がこれです:

$user = User::forName('John')->email; 
関連する問題