2016-09-12 9 views
0

自分の関数で条件をバインドしたい。私は私にマーケティング担当者の名前を与えるMarketersGetという関数を持っています。ここに私のコードは次のとおりです。Doctrine - 条件付きでクエリ内にある

public function MarketersGet(string $marketerId = ''):array 
{ 
    $marketerId = (int)$marketerId; 
    $userRoles = config('constantTypes.blah'); 
    $marketerRole = $userRoles['MARKETER']; 

    $userRepository = App::make(DoctrineUserRepo::class); 
    $result = $userRepository 
     ->selectFrom(' model ') 
     ->where(' model.rolesRole = '.$marketerRole)    
     ->getQuery() 
     ->getResult(); 
     $marketers = []; 
    foreach ($result as $user) { 
     $marketers[] = [ 
      'name' => $user->getUserName(), 
      'id' => $user->getId() 
     ]; 
    } 

    return $marketers; 
} 

私は$ marketerIdを条件にしたい、それは私が

->andWhere(' model.id = '.$marketerId) 

を付加価値を持っている場合、私は次のように試してみました:

$result = $userRepository 
     ->selectFrom(' model ') 
     ->where(' model.rolesRole = '.$marketerRole); 
     if ($marketerId != '') 
      $result->andWhere(' model.id = '.$marketerId); 
     $result->getQuery() 
     ->getResult(); 

結果を上回っています:

[] 
No Properties 

は、実は私はこのようなデフォルトのクエリでandWhereを置く場合:

$result = $userRepository 
     ->selectFrom(' model ') 
     ->where(' model.rolesRole = '.$marketerRole) 
     ->andWhere(' model.id = '.$marketerId) 
     ->getQuery() 
     ->getResult(); 

を実際の結果は次のようになります:

{name: "blah blah", id: 28} 

確かに私の条件付きクエリは、それを解決するために、任意の提案偽のですか?

答えて

0

これは、任意の違いを作るかもしれませんが、あなたはそれを試す可能性がある場合教えする方法:

$result = $userRepository 
       ->selectFrom(' model ') 
       ->where(' model.rolesRole = '. $marketerRole); 

    if(isset($marketerId) && $marketerId){ 
     $result->where(' model.id = '.$marketerId); 
    } 
    $result->getQuery() 
    ->getResult();