2017-03-02 5 views
0

現在、コントローラに次のコードを使用してデータベースにクエリしています。このコードは、ユーザがまだユーザ名を設定しているかどうかをチェックします。laravalのコントローラまたはモデル関数を使用してデータベースを照会する方が良いですか?

$user = User::where('email', $userdata['email'])->first(); 

if(empty($user->username)){ 
    echo 'Set username here...'; 
} else { 
    echo 'My home page!'; 
} 

私の質問は、それがこれを行うにはUserモデルで機能させるか、それがあるとして、それを維持することをお勧めしています。たとえば、最初の行が削除され、if文でtrueまたはfalseを返すモデル関数が呼び出されます。

私の最初の考えは、MVC構造化プロジェクトは「太ったモデル」と「スキニーコントローラ」を持つべきであるため、モデル関数に移動する必要があるということです。これは「ビジネスロジック」なので、モデルに含める必要があります。もしそうなら、これをモデルに移動してコントローラから関数を呼び出す方法の例を挙げてください。

public function hasUsername() 
{ 
    if($this->username) 
    { 
     return true; 
    } 

    return false; 
} 

とあなたのコントローラにあなたが言うことができる:

$user = User::where('email', $userdata['email'])->first(); 

if($user->hasUsername()) 
{ 
    // do somethin 
} 
+0

など、要求のクラスで独自のクラスのビジネスロジックを検証ロジックを維持する必要があります。 –

+0

@AlexeyMezeninあなたが私がこれをやる方法の例を教えてください、私が見たほとんどの例は、コントローラー内のすべての「ビジネスロジック」を行っていました。 – JL9

答えて

0

。あなたは例を求めました。ビューで

use App\User; 

protected $user; 

public function __construct(User $user) 
{ 
    $this->user = $user; 
} 

public function showSomething($userdata) 
{ 
    return view('some.view', [ 
     'user' => $this->user->findByEmail($userdata['email']) 
    ]); 
} 

:コントローラで

public function findByEmail($email) 
{ 
    return $this->where('email', $email)->first(); 
} 

:私はこのモデル内のメソッドを作成したい。この例では

{{ empty($user->username) ? 'Hello anonymous' : $user->username }} 

を、それが中にクエリを移動するようになります。モデルはあまり良いアイデアではありませんが、アプリケーションが大きくなると、データを扱う唯一の良い方法だと思います。 MVCです。また、あなたは間違いなくモデルにすべてのデータ関連のコードを移動する必要があります

+0

確かにこれはあまり達成されていませんか? – JL9

+0

ご迷惑をおかけして申し訳ございません。私はそれが脂肪のモデルと皮肉なコントローラを作ることが良いと思う。 –

0

あなたは間違いなくモデルにコードを関連するすべてのデータを移動する必要がありますあなたのUser.phpモデルでのような関数を書くことができ

0

モデル

public static function checkIfUsernameExists($email) { 
$user = User::where('email', $email)->first(); 

if (empty($user->username)) { 
    return true; 
} else { 
    return false; 
} 
} 

コントローラ

if(User::checkIfUsernameExists($userdata['email'])){ 
     echo 'Set username heree...'; 
    } else { 
     echo 'My home page!'; 
    } 
関連する問題