我希望symfony / doctrine在每次创建记录时在两个不同的字段中复制id。
是否可以一次拍摄(我使用Stragegy =“AUTO”)?
如果是,我该怎么做?
对于instence,我希望我的实体CATEGORY有两个attribut id(auto)。 在命名id,另一个idbis。
(在我的例子中,我处理一个包含父记录和子记录的实体,所以我也有idparent将子类别与其父类别联系起来)
如果记录是父类别,则id和idbis获得相同的整数:
=> id = 2,idbis = 2,idParent = NULL
如果记录是子类别(假设其父级是ID为2的类别),则:
=> id = 3,idParent = 2,idCategory1 = 2
那会很棒,因为那时我可以轻松检索链接到id为2的类别的所有类别(父级和子级)。
答案 0 :(得分:2)
您应该看看嵌套集结构。它可以通过使用边界轻松检索简单查询中的子元素。
否则,您可以通过在插入/更新时创建触发器来实现此目的。
答案 1 :(得分:0)
您可以使用与实体本身的关系:
<?php
/** @Entity **/
class Category
{
// ...
/**
* @OneToMany(targetEntity="Category", mappedBy="parent")
**/
private $children;
/**
* @ManyToOne(targetEntity="Category", inversedBy="children")
**/
private $parent;
// ...
}
答案 2 :(得分:0)
这只是@Markus提出的好主意的完整版本。基本上,parent_id对于主类别为null,否则为父值的id。
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="path\to\Entity\Categories", mappedBy="parent", cascade={"persist"})
*/
private $children;
/**
* @var path\to\Entity\Categories
*
* @ORM\ManyToOne(targetEntity="path\to\Entity\Categories", inversedBy="children")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $parent;