реализация “обновления, если существует” в Доктрине ORM

Первый будет работать так, как вы хотите - однако вы обойдете ограничение безопасности, и теперь ваши страницы уязвимы для внедрения JavaScript (что является первоначальной причиной, по которой это изменение было сделано).

Второй просто не работает. Она не расширяет переменную ${parameter1}, а просто кодирует ее как URL-адрес, например:

onclick="myFunction?$%7Bparameter1%7D"

Вы действительно должны делать это, как показано на странице.

th:data-parameter1="${parameter1}" onclick="myFunction(this.getAttribute('data-parameter1'));"
24
задан Haim Evgi 9 November 2011 в 11:53
поделиться

4 ответа

Согласно https://www.vivait.co.uk/labs/updating-entities-when-an-insert-has-a-duplicate-key-in-doctrine этого можно достичь с $entityManager->merge().

$entity = new Table();
$entity->setId(1);
$entity->setValue('TEST');

$entityManager->merge($entity);
$entityManager->flush();
5
ответ дан 29 November 2019 в 00:27
поделиться

Доктрина поддерживает REPLACE INTO с использованием метода replace(). Это должно работать точно так же, как ON DUPLICATE KEY UPDATE, который вы искали.

Документы: Замена записей

3
ответ дан 29 November 2019 в 00:27
поделиться

Я думаю, что лучший способ - это вызвать entityManager-> merge ($ entity); Потому что это самая близкая вещь для обновления, если существует операция, как обещано в документации: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/working-with-objects.html

0
ответ дан 29 November 2019 в 00:27
поделиться

The only thing I can think of is to query first for the entity if it exists otherwise create new entity.

if(!$entity = Doctrine::getTable('Foo')->find(/*[insert id]*/))
{
   $entity = new Foo();
}
/*do logic here*/
$entity->save();
5
ответ дан 29 November 2019 в 00:27
поделиться
Другие вопросы по тегам:

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