2016-09-12 6 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; 
} 

는 내가이 같은 노력

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

을 부가가치가있는 경우 나, $ 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();