Я работаю над формой Symfony 4 со встроенными типами для REST API. Форма:
class OffertaType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('pulsanti_social_attivi', CheckboxType::class, [ ])
->add('immagini', CollectionType::class, [
'entry_type' => OffertaImmagineType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'prototype' => 'immagini'
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => Offerta::class,
'allow_extra_fields' => true,
'csrf_protection' => false,
]
);
}
}
Коллекция содержит 2 предмета
[
{
"id": 1,
"url": "https://via.placeholder.com/150?text=1"
},
{
"id": 2,
"url": "https://via.placeholder.com/150?text=2"
}
]
Все "работает", если я публикую некоторые данные, создается новый объект, и если я обновляю объект, БД обновляется. Странная вещь заключается в том, что обновление / удаление строки кажется основанным на положении объекта в коллекции, а не на его идентификаторе. Если я удаляю первый объект, результат должен быть
[
{
"id": 2,
"url": "https://via.placeholder.com/150?text=2"
}
]
но его
[
{
"id": 1,
"url": "https://via.placeholder.com/150?text=2"
}
]
Symfony видит только 1 объект, поэтому удалите второй и обновите первое поле "url".
Как я могу "проиндексировать" коллекцию по ID объектов, а не по их положению?