Ich mag die allgemeine Idee, Doctrine-Repositories als Dienste in Symfony2 zu übergeben und die Weitergabe von EntityManager zu vermeiden. Während es beim Lesen von Daten in Ordnung ist, wird die Speicherlogik hier jedoch etwas problematisch.Lehre: Kann ich nur eine Klasse von Entitäten spülen?
ist dies als Referenz nehmen lassen: http://php-and-symfony.matthiasnoback.nl/2014/05/inject-a-repository-instead-of-an-entity-manager/, aber mit einer Änderung Trennung persistierenden und Spülung:
class DoctrineORMCustomerRepository extends EntityRepository implements CustomerRepository
{
public function persist(Customer $customer)
{
$this->_em->persist($customer);
}
public function flush()
{
$this->_em->flush();
}
}
Das Problem, das Sie in einem bestimmten Repository in allen Unternehmen alle Änderungen bündig ist.
Jetzt ist es möglich, nur eine Klasse von Entitäten zu spülen? (Cascading möglicherweise zu unselbständigen Einheiten), so konnte ich im Grunde so etwas wie:
foreach ($customers as $customer) {
$this->customerRepository->persist($customer);
}
$this->customerRepository->flush();
ich als so etwas wie:
$this->_em->flush(getUnitOfWork()->getIdentityMap()[$this->_entityName]);
Aber ich muss etwas falsch verstanden haben, weil es nicht funktioniert.
EDIT: Ja, ich weiß, ich kann $this->_em->flush($entity)
tun, aber dies eins nach dem anderen ist suboptimal. Ich weiß sogar, dass ich $this->_em->flush($arrayOfEntities)
tun kann, aber um das "foreach" -Beispiel auf diese Weise funktionieren zu lassen, müsste ich alle persistierenden Entitäten im Repository verfolgen, die einige Doctrine-Interna duplizieren.
Nope starten. Tatsächlich hast du den Grund angedeutet. Entitäten neigen dazu, Beziehungen zu anderen Entitäten zu unterhalten. Wenn Sie diese Art von Isolation wirklich benötigen, verwenden Sie mehrere Entity Manager. Aber in der Praxis habe ich nie gefunden, dass der Entity Manager ein Problem darstellt. – Cerad