Я использую Symfony 2.7. Я создал форму с сущностью, которая при отправке возвращает массив объектов. Мне нужно сравнить этот массив объектов с тем, что есть в этой таблице?
Вот как я настроил форму
$builder
.......
->add('my_options', 'entity', [
'label' => 'Options:',
'class' => 'xxxxBundle:Details',
'choice_label' => 'Title',
'multiple' => true,
'expanded' => true,
'required' => false,
'mapped' => false,
'data' => $data,
'attr' => ['class' => 'AdminList'],
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('de')
->where('de.active = ?1')
->setParameter(1, 1); }
]);
Затем я выполняю базовый поиск того, что уже есть в моей таблице параметров,
$EditPanels = $this->getDoctrine()
->getRepository('xxxBundle:Options')
->findBy(['AccountID' => $AcID]);
Это дает мне два массива, один из которых пользователь только что выбрал (параметры, которые им теперь нужны в этой учетной записи), а другой - с тем, что уже есть в таблице базы данных.
Как сравнить эти таблицы, чтобы обновить строки с новыми параметрами, удалив ненужные и добавив новые параметры?
Спасибо.
2 ответа
Я думаю, вам не следует даже запрашивать существующие записи. Вместо этого вы можете:
Сохранять все новые записи и обновлять существующие:
foreach ($new as $object) {
if ($object->getId() === null) {
$em->persist($object);
}
}
$em->flush();
Удалите все остальные записи из базы данных:
$qb = $em->getRepository('xxxxBundle:Details')->createQueryBuilder();
$qb->delete()->where($qb->expr()->notIn('id', array_column('id', $new)));
P.S. Не уверен в синтаксисе, но идея у вас есть.
$newIds = array_map($formData, function (Details $d) {
return $d->id;
});
$oldIds = array_map($EditPanels, function (Details $d) {
return $d->id;
});
$shouldBeRemoved = array_diff($oldIds, $newIds);
$shouldBeAdded = array_diff($newIds, $oldIds);
Теперь у вас есть все идентификаторы для параметров, которые необходимо изменить. Надеюсь это поможет.
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.