I have a problem with the SonataAdminBunle in combination with symfony 2.2. I have a Project entity and a ProjectImage entity and specified a One-to-Many relationship betwee
One way that I solved the was to manually set all inverse-side associations through a custom Sonata model manager.
getEntityManager($object);
$entityManager->persist($object);
$entityManager->flush();
$this->persistAssociations($object);
} catch (\PDOException $e) {
throw new ModelManagerException('', 0, $e);
}
}
/**
* {@inheritdoc}
*/
public function update($object)
{
try {
$entityManager = $this->getEntityManager($object);
$entityManager->persist($object);
$entityManager->flush();
$this->persistAssociations($object);
} catch (\PDOException $e) {
throw new ModelManagerException('', 0, $e);
}
}
/**
* Persist owning side associations
*/
public function persistAssociations($object)
{
$associations = $this
->getMetadata(get_class($object))
->getAssociationMappings();
if ($associations) {
$entityManager = $this->getEntityManager($object);
foreach ($associations as $field => $mapping) {
if ($mapping['isOwningSide'] == false) {
if ($owningObjects = $object->{'get' . ucfirst($mapping['fieldName'])}()) {
foreach ($owningObjects as $owningObject) {
$owningObject->{'set' . ucfirst($mapping['mappedBy']) }($object);
$entityManager->persist($owningObject);
}
$entityManager->flush();
}
}
}
}
}
}
Be sure to define this as a new service in your services.yml file:
services:
sample.model.manager:
class: Sample\AdminBundle\Model\ModelManager
arguments: [@doctrine]
sample.admin.business:
class: Sample\AdminBundle\Admin\BusinessAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Venues", label: "Venue" }
arguments: [~, Sample\AppBundle\Entity\Business, ~]
calls:
- [ setContainer, [@service_container]]
- [ setModelManager, [@sample.model.manager]]