findBy - обновление нескольких записей в Symfony - PullRequest
1 голос
/ 12 марта 2019

У меня есть несколько ответов на один вопрос, который я получаю. Я хочу обновить свое числовое поле, как в примере для каждого ответа на этот вопрос.

Проблема в том, что он всегда обновляется. Работает нормально с findOneBy, но все равно обновляет только один ответ.

Я пытался использовать foreach, но мне кажется, что мой синтаксис неправильный, потому что "ответ" нигде не распознается.

$answers = $this->getAnswerRepository()->findBy(['question' => $question]);

        foreach ($answers as $answer) {
            $answer = new Answer();
            $this->em->persist($answer);

        }


    $answer->setNumbers($answer->getNumbers() +1);

    $this->em->flush();

    return $answer;

1 Ответ

2 голосов
/ 12 марта 2019
$answers = $this->getAnswerRepository()->findBy(['question' => $question]);
foreach ($answers as $answer) {
    $answer->setNumbers($answer->getNumbers() +1);
}
$this->em->flush();

Но лучшим решением является использование отдельного метода в AnswerRepository что-то вроде:

function updateCounts($question) 
{
    $queryBuilder
        ->update('answers', 'a')
        ->set('a.number', 'a.number + 1')
        ->where('a.question', '?')
        ->setParameter($question)
    ;
}

и вызов что-то вроде:

$this->getAnswerRepository()->updateCounts($question);
...