Symfony2 使用 strategy=“AUTO” 在 2 个字段(id 和 idbis)中复制 id


Symfony2 duplicate the id in 2 fields (id and idbis) with strategy="AUTO"

我希望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
  *
  * @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;