ORM Doctrine ManyToOne on update CASCADE (Symfony))
j'ai deux entités
class Promotor
{
/**
* @ORMManyToOne(targetEntity="Ciudad", inversedBy="promotor")
* @ORMJoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false)
*/
protected $ciudad;
et
class Ciudad
{
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="nombre", type="string", length=50)
*/
private $nombre;
un" promoteur "peut vivre dans une "Ciudad" (ville). Et dans une " Ciudad "(ville) peut vivre beaucoup de"Promotores".
si j'ajoute onDelete= "CASCADE" dans JoinColumn
/**
* @ORMManyToOne(targetEntity="Ciudad", inversedBy="promotor")
* @ORMJoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected $ciudad;
il génère le code suivant
ALTER TABLE promotor DROP FOREIGN KEY FK_BF20A37FE8608214;
ALTER TABLE promotor ADD CONSTRAINT FK_BF20A37FE8608214 FOREIGN KEY (ciudad_id)
REFERENCES Ciudad (id) ON DELETE CASCADE
mais j'aime aussi faire CASCADE sur update. J'ai essayer avec onUpdate="CASCADE", mais il n''
[DoctrineCommonAnnotationsAnnotationException]
[Creation Error] The annotation @ORMJoinColumn declared on property WebPromotorBundleEntityPromotor::$ciudad does not have a property named
"onUpdate". Available properties: name, referencedColumnName, unique, nulla
ble, onDelete, columnDefinition, fieldName
par l'erreur je comprends que la propriété onUpdate ne n'existe pas, mais.. Y a-t-il un moyen de faire cascade sur update?
1 réponses
l'onDelete="CASCADE" est utilisé au niveau de la base de données. Comme vous l'avez déjà dit il n'y a pas de onUpdate. Un autre inconvénient est que sur DELETE CASCADE ne fonctionne que sur InnoDB. Ça ne marche pas sur MyISAM.
Mais vous pouvez utiliser de la Doctrine en mémoire cascade d'opérations:
class Promotor
{
/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false)
*/
protected $ciudad;
tout est décrit dans la documentation: http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations
de Plus, vous pouvez sauter l' JoinColumn annotation, parce que la façon dont vous l'avez écrit, est la configuration par défaut et elle est générée implicitement.
alors vous pouvez simplement écrire:
class Promotor
{
/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"})
*/
protected $ciudad;