2016-09-12 2 views
0

Я хочу связать условие в своей функции. У меня есть функция MarketersGet, которая дает мне имя маркетолога. Вот мой код:Доктрина - условная и где угодно

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(); 
Смежные вопросы