Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
 getQuery, как добавить условие?  [new]
Dimitry85
Member

Откуда:
Сообщений: 2
Не могу понять, помогите, толкните в нужном направлени. Допустим есть примерно такой запрос:
$Content = $qb->select('f')
                ->from('AppBundle:', 'f')
                ->where('f.name= :name')
                ->setParameter('name', $name)
                ->getQuery()->getResult(); 

В чистом sql я просто добавлял if и с помощью конкатенации получал строку запроса.
Каким образом сделать что-то типа? не копировать же весь запрос:
$Content = $qb->select('f')
                ->from('AppBundle:', 'f')
                ->where('f.name= :name')
                ->andwhere('f.orderName = :orderName ')
                ->setParameter('name', $name)
                ->setParameter('orderName ', $orderName )
                ->getQuery()->getResult(); 
30 сен 17, 14:08    [20833367]     Ответить | Цитировать Сообщить модератору
 Re: getQuery, как добавить условие?  [new]
Sidmal
Member

Откуда:
Сообщений: 238
Dimitry85
В чистом sql я просто добавлял if и с помощью конкатенации получал строку запроса.


Если честно, то из вашего поста ничего не понял о задаче, но попробую поиграть в мыслечтение и угадать, что вы хотели:

Dimitry85
как добавить условие?


если вы хотите добавить в запрос условие на основание проверки входящих параметров, то в Doctrina это делается как-то так:

public function repositoryMethod($field2Value = 0)
{
    $qb = $this->createQueryBuilder('tableAlias')
        ->where('tableAlias.field1= :value1')
        ->setParameter('value1', $value1);

    if ($field2Value > 0) {
        $qb
            ->andWhere('tableAlias.field2= :value2')
            ->setParameter('value2', $field2Value);
    }

    ...

    try {
        $result = $qb->getQuery()->getResult();
   } catch (NoResultException $e) {
       $result = null;
   }

   return $result;
}


или можно сэкономить на спичках (вызовах setParameter) чуть чуть памяти и сделать так:

    ...

    $qb = $this->createQueryBuilder('tableAlias')
        ->where('tableAlias.field1= :value1');

    if ($field2Value > 0) {
        $qb->andWhere('tableAlias.field2= :value2');
    }

    ...

    $qb->setParameters(
	new ArrayCollection(
		[
			new Parameter('value1', $value1),
			new Parameter('value2', $field2Value)
		]
	)
    );

    try {
        $result = $qb->getQuery()->getResult();
   } catch (NoResultException $e) {
       $result = null;
   }

   return $result;
}


Dimitry85
и с помощью конкатенации получал строку запроса


если вы хотите получить строку DQL запроса, то это можно сделать так (учтите, что строка будет содержать вместо значений placeholders):

...
echo $qb->getDQL();


а если массив placeholder-ов и их значений, то так:

...
var_dump($qb->getParameters());


ну а если вам требуется что-то еще, что я не смог угадать, то поясняйте, пожалуйста?)
30 сен 17, 17:15    [20833498]     Ответить | Цитировать Сообщить модератору
Все форумы / PHP, Perl, Python Ответить