Doctrine2 ile On delete cascade
Ana tablodan bir satır silmek ve otomatik olarak alt tablo Doctrine2 kullanarak eşleşen satırları silmek için nasıl öğrenmek için basit bir örnek yapmaya çalışıyorum.
İşte kullanıyorum iki taraf:
Child.php:
<?php
namespace Acme\CascadeBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="child")
*/
class Child {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
*
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="father_id", referencedColumnName="id")
* })
*
* @var father
*/
private $father;
}
Father.php
<?php
namespace Acme\CascadeBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="father")
*/
class Father
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
Tabloları doğru veritabanı oluşturulur, ancak On Delete Cascade oluşturulan değil seçeneği. Neyi yanlış yapıyorum?
CEVAP
Doktrinde cascades iki türü vardır:
1) ORM seviye Derneği cascade={"remove"}
kullanır - bu UnitOfWork yapılır ve veritabanı yapısı etkilemez güçlü bir ilişki vardır. Bir nesneyi kaldırdığınızda, UnitOfWork derneğin tüm nesneler üzerinde yineleme ve bunları kaldırın.
2) Veritabanı düzey dernek joinColumn onDelete="CASCADE"
kullanır - bu veritabanına yabancı anahtar sütunu için Delete Cascade ekleyin
@ORM\JoinColumn(name="father_id", referencedColumnName="id", onDelete="CASCADE")
Ben de senin cascade=yol göstermek istiyorum {eğer Çocuk bir nesneyi silmek""} Kaldır şu anda, bu basamakla Ana nesne kaldıracaktır. Ne istediğinizi açıkça değil.
ON DELETE CASCADE SQL, Hangi yöne Silm...
Android SQLite kullanarak yabancı anah...
JPA 2.0 orphanRemoval=delete Cascade g...
Varlık Çerçevesi: &; Store update, ıns...
CASCADE sadece bir kez SİL...