我希望symfony/doctrine在每次创建记录时在两个不同的字段中复制id。
有可能一次性拍摄吗(我使用 Stragegy="AUTO")?
如果是,我该怎么做?
为了独立,我希望我的实体类别有两个属性ID(自动)。在命名 ID 上,另一个 IDBI。
(在我的示例中,我处理一个包含父记录和子记录的实体,因此我也有 idparent 将子类别与其父类别链接)
如果记录是父类别,则 id 和 idbis 得到相同的整数:
=> id=2, idbis=2, idParent = NULL
如果记录是子类别(假设其父记录是 id=2 的类别),则:
=> id=3, idParent=2, idCategory1=2
那会很棒,因为这样我就可以轻松检索链接到 id 为 2 的类别的所有类别(父级和子级)。
你应该看看嵌套集结构。它旨在通过使用边界轻松检索简单查询中的子元素。
否则,您可以通过在插入/更新时创建触发器来执行此操作。
您可以使用与实体本身的关系:
<?php
/** @Entity **/
class Category
{
// ...
/**
* @OneToMany(targetEntity="Category", mappedBy="parent")
**/
private $children;
/**
* @ManyToOne(targetEntity="Category", inversedBy="children")
**/
private $parent;
// ...
}
@Markus提出的好主意的完整版本。基本上parent_id对于主类别为 null,否则将父类别的 id 作为值。
/**
* @var integer
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var DoctrineCommonCollectionsCollection
*
* @ORMOneToMany(targetEntity="pathtoEntityCategories", mappedBy="parent", cascade={"persist"})
*/
private $children;
/**
* @var pathtoEntityCategories
*
* @ORMManyToOne(targetEntity="pathtoEntityCategories", inversedBy="children")
* @ORMJoinColumns({
* @ORMJoinColumn(name="parent_id", referencedColumnName="id", nullable=true, onDelete="SET NULL")
* })
*/
private $parent;