I have database table that looks like this:
+----+--------+--------------------+ | id | parent | description | +----+--------+--------------------+ | 1 | null | P Cat 1 | | 2 | 1 | Child 1 of P Cat 1 | | 3 | 1 | Child 2 of P Cat 1 | | 4 | null | P Cat 2 | | 5 | 4 | Child 1 of P Cat 2 | | 6 | 4 | Child 2 of P Cat 2 | +----+--------+--------------------+
How can I create a doctrine 2 entity that has these columns, but I need the parent column to reference the "id" column as a parent. Of course, a parent record has a null "parent" column value.
So fair I have
<?php
namespace MyNamespace;
use Doctrine\ORM\Mapping AS ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="category")
**/
class Category
{
/**
* @ORM\Id
* @ORM\Column(type="integer", name="id")
* @ORM\GeneratedValue
*/
protected $id;
/**
* Creates a parent / child relationship on this entity.
*
* @ORM\ManyToOne(targetEntity="MyNamespace\Category",inversedBy="id")
* @ORM\JoinColumn(name="FK_parent_id", referencedColumnName="id", nullable=true)
*/
protected $parent = null;
/**
* @ORM\Column(type="string", name="description", length=250)
*
* @var string
*/
protected $description;
/**
* Gets the Primary key value.
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Sets another category ID as the parent of this category.
*/
public function setParent(Category $category)
{
$this->parent = $category;
}
/**
* Clears the parent id and makes it null.
*/
public function clearParent()
{
$this->parent = null;
}
/**
* Sets the description.
*
* @param string $description
* @return Category
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Gets the description value.
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
}
Needless to say, this doesn't appear to work. The questions are:
In database management, a relationship between two files. The parent file contains required data about a subject, such as employees and customers. The child is the offspring; for example, an order is the child to the customer, who is the parent.
Parent child relationship is Tightly Coupled relationship having attributes. 1)Parent reference becomes Mandatory for child. 2)Cascaded delete : If you delete parent child gets deleted. 3)Sharing rules on child determined by parent.
Parent child relationship is established in Hierarchical database Models.
Parent-Child functionality in ServiceNow replaces what was known as the "Merge" feature in ServiceDesk. For example, if the Support Center receives multiple emails and phone calls regarding an outage, it will likely result in many incidents with the same categorization and communication needs.
This should work:
<?php
use Doctrine\Common\Collections\ArrayCollection;
/** @ORM\Entity */
class Category {
/**
* @ORM\Id
* @ORM\Column(type="integer", name="id")
* @ORM\GeneratedValue
*/
protected $id;
// ...
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
*/
protected $children;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
* @ORM\JoinColumn(name="parent", referencedColumnName="id")
*/
protected $parent;
public function __construct() {
$this->children = new ArrayCollection();
}
// Once you have that, accessing the parent and children should be straight forward
// (they will be lazy-loaded in this example as soon as you try to access them). IE:
public function getParent() {
return $this->parent;
}
public function getChildren() {
return $this->children;
}
// ...
// always use this to setup a new parent/child relationship
public function addChild(Category $child) {
$this->children[] = $child;
$child->setParent($this);
}
public function setParent(Category $parent) {
$this->parent = $parent;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With