এখানে সহজ উদাহরণ। একটি পরিচিতিতে একের সাথে অনেকগুলি যুক্ত ফোন নম্বর রয়েছে। যখন কোনও পরিচিতি মুছে ফেলা হয়, আমি চাই এর সাথে সম্পর্কিত সমস্ত ফোন নম্বরও মুছে ফেলা হোক, তাই আমি মুছে ফেলুন ক্যাসকেড ব্যবহার করি। একের সাথে একাধিক / বহু-এক-এক সম্পর্ক বিদেশী কী দ্বারা ফোন_নম্বারে প্রয়োগ করা হয়।
CREATE TABLE contacts
(contact_id BIGINT AUTO_INCREMENT NOT NULL,
name VARCHAR(75) NOT NULL,
PRIMARY KEY(contact_id)) ENGINE = InnoDB;
CREATE TABLE phone_numbers
(phone_id BIGINT AUTO_INCREMENT NOT NULL,
phone_number CHAR(10) NOT NULL,
contact_id BIGINT NOT NULL,
PRIMARY KEY(phone_id),
UNIQUE(phone_number)) ENGINE = InnoDB;
ALTER TABLE phone_numbers ADD FOREIGN KEY (contact_id) REFERENCES \
contacts(contact_id) ) ON DELETE CASCADE;
বিদেশী কী সীমাবদ্ধতার সাথে "অন ডিলেট ক্যাসকেড" যুক্ত করে, ফোন সম্পর্কিত নম্বরগুলি তাদের সম্পর্কিত পরিচিতি মুছে ফেলা হলে স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে।
INSERT INTO table contacts(name) VALUES('Robert Smith');
INSERT INTO table phone_numbers(phone_number, contact_id) VALUES('8963333333', 1);
INSERT INTO table phone_numbers(phone_number, contact_id) VALUES('8964444444', 1);
এখন যখন পরিচিতি সারণীতে একটি সারি মুছে ফেলা হবে, তখন সম্পর্কিত সমস্ত ফোন_নম্বার সারি স্বয়ংক্রিয়ভাবে মোছা হবে।
DELETE TABLE contacts as c WHERE c.id=1; /* delete cascades to phone_numbers */
ডক্ট্রাইনে একই জিনিস অর্জন করতে, একই ডিবি-স্তরের "অন ডিলিট ক্যাসকেড" আচরণটি পেতে, আপনি @ জয়নকলামকে অনডিলিট = "ক্যাসকেড" বিকল্পের সাহায্যে কনফিগার করেন ।
<?php
namespace Entities;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @Entity
* @Table(name="contacts")
*/
class Contact
{
/**
* @Id
* @Column(type="integer", name="contact_id")
* @GeneratedValue
*/
protected $id;
/**
* @Column(type="string", length="75", unique="true")
*/
protected $name;
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact")
*/
protected $phonenumbers;
public function __construct($name=null)
{
$this->phonenumbers = new ArrayCollection();
if (!is_null($name)) {
$this->name = $name;
}
}
public function getId()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function addPhonenumber(Phonenumber $p)
{
if (!$this->phonenumbers->contains($p)) {
$this->phonenumbers[] = $p;
$p->setContact($this);
}
}
public function removePhonenumber(Phonenumber $p)
{
$this->phonenumbers->remove($p);
}
}
<?php
namespace Entities;
/**
* @Entity
* @Table(name="phonenumbers")
*/
class Phonenumber
{
/**
* @Id
* @Column(type="integer", name="phone_id")
* @GeneratedValue
*/
protected $id;
/**
* @Column(type="string", length="10", unique="true")
*/
protected $number;
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;
public function __construct($number=null)
{
if (!is_null($number)) {
$this->number = $number;
}
}
public function setPhonenumber($number)
{
$this->number = $number;
}
public function setContact(Contact $c)
{
$this->contact = $c;
}
}
?>
<?php
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
$contact = new Contact("John Doe");
$phone1 = new Phonenumber("8173333333");
$phone2 = new Phonenumber("8174444444");
$em->persist($phone1);
$em->persist($phone2);
$contact->addPhonenumber($phone1);
$contact->addPhonenumber($phone2);
$em->persist($contact);
try {
$em->flush();
} catch(Exception $e) {
$m = $e->getMessage();
echo $m . "<br />\n";
}
আপনি এখন যদি
# doctrine orm:schema-tool:create --dump-sql
আপনি দেখতে পাবেন যে একই এসকিউএল প্রথম, কাঁচা-এসকিউএল উদাহরণ হিসাবে তৈরি করা হবে