私は2つのエンティティを持っています
class Promotor
{
/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor")
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false)
*/
protected $ciudad;
そして
class Ciudad
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="nombre", type="string", length=50)
*/
private $nombre;
「プロモーター」は1つの「シウダッド」(市)に住むことができます。そして「Ciudad」(都市)では多くの「Promotores」を生きることができます。
JoinColumnにonDelete = "CASCADE"を追加した場合
/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor")
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected $ciudad;
次のコードを生成します
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
しかし、私は更新時にCASCADEを行うのも好きです。 onUpdate = "CASCADE"で試してみましたが、機能しません
[Doctrine\Common\Annotations\AnnotationException]
[Creation Error] The annotation @ORM\JoinColumn declared on property Web\PromotorBundle\Entity\Promotor::$ciudad does not have a property named
"onUpdate". Available properties: name, referencedColumnName, unique, nulla
ble, onDelete, columnDefinition, fieldName
エラーにより、プロパティonUpdateが存在しないことは理解していますが、..更新時にカスケードを実行する方法はありますか?
OnDelete = "CASCADE"は、データベースレベルで使用されます。すでに述べたように、onUpdateはありません。もう1つの欠点は、ON DELETECASCADEがInnoDBでのみ機能することです。 MyISAMでは機能しません。
ただし、Doctrineメモリ内カスケード操作を使用できます:
class Promotor
{
/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false)
*/
protected $ciudad;
すべてドキュメントに記載されています: http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations
さらに、JoinColumnアノテーションはスキップできます。これは、作成した方法がデフォルトの構成であり、暗黙的に生成されるためです。
だからあなたはただ書くことができます:
class Promotor
{
/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"})
*/
protected $ciudad;