KerryDarko
@KerryDarko

Doctrine: QueryBuilder: можно ли добавить параметры к уже установленным?

С помощью QueryBuilder я могу добавить какое-либо условие к уже добавленным и не заменить их:

if (isset($params['cityId'])) {
    $qb->andWhere('c.city = :cityId');
}
if (isset($params['categoryId'])) {
    $qb->andWhere('c.categoryId = :catId')
}


Но добавленные параметры замещают старые. Я не въехала в документацию, или в этом действительно нет необходимости и параметры действительно всегда добавляются скопом? А если я хочу все разбить на методы?

Есть ли смысл использовать:

$parameters = $qb->getParameters();
$parameters[] = new Parameter('cityId', $params['cityId']);
$qb->setParameters($parameters);
  • Вопрос задан
  • 681 просмотр
Решения вопроса 1
slimus
@slimus
Symfony, Golang
Совсем ничего не понятно из вопроса, но судя по уточнениям вы не знаете про метод setParameter()
Если нужно что-то по условию добавить. я делаю так (псевдокод):
if ($getParams->get('name')) {
  $qb->andWhere('t.name = :name')
    ->setParameter('name', $getParams->get('name'));
}

или
$params = [];
if ($getParams->get('name')) {
  $qb->andWhere('t.name = :name');
  $params['name'] =  $getParams->get('name');
}
$qb->setParameters($params);


какие параметры замещают старые? что вы имеете ввиду?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
вы же в конце своего запроса пишите
->getQuery
только после этой команды формируется запрос и уходит на БД.
До этого момента вы можете составлять запрос как угодно.
Ответ написан
KerryDarko
@KerryDarko Автор вопроса
Проблема оказалась в другом месте.
Да, параметры можно добавлять по одному через setParameter()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы