Обновление связи с доктриной и Symfony 2.7Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Обновление связи с доктриной и Symfony 2.7

Сообщение Anonymous »

Я хочу знать, существует ли лучший способ обновления ассоциации в доктрине с обратной стороны сущности, в данном случае это тип «многие ко многим», но это может быть другой способ.
Это метод, который я использовал:

Код: Выделить всё

$entity = $em->getRepository('MyBundle:MyEntity')->find($id);

foreach ($entity->getAssociation() as $value) {
$entity->removeAssociation($value);
}
$editForm = $this->createEditForm($entity);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
foreach ($entity->getAssociation() as $value) {
$entity->addAssociation($value);
}
$em->flush();
}
Я думаю, что это не очень хороший подход, потому что я хочу обновить (то есть удалить и добавить) только ассоциацию, которую я выбираю или отменяю выбор в своей форме, а не каждый элемент массива. Поэтому я сделал сервис с функцией обновления:

Код: Выделить всё

    public function updateCollection(&$newEntity, $newCollection, $oldCollection, $contains, $add, $remove) {

foreach ($oldCollection as $value) {
$item = call_user_func(array($newCollection, $contains), $value);
if(!$item){
call_user_func( array($newEntity, $remove), $value );
}
}

foreach ($newCollection as $value) {
$item = call_user_func(array($oldCollection, $contains), $value );
if(!$item){
call_user_func( array($newEntity, $add), $value );
}
}

}
И я вызываю этот метод следующим образом:

Код: Выделить всё

    $oldAssociation = clone $entity->getAssociation();

$editForm = $this->createEditForm($entity);
$editForm->handleRequest($request);

if ($editForm->isValid()) {

$this->get('service_update')->updateCollection(
$entity,
$entity->getAssociation(),
$oldAssociation,
'contains',
'addAssociation',
'removeAssociation'
);

$em->flush();

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

Подробнее здесь: https://stackoverflow.com/questions/416 ... ymfony-2-7
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»