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

时间:2014-12-06 01:59:37

标签: php symfony doctrine-orm

我希望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的类别的所有类别(父级和子级)。

3 个答案:

答案 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对于主类别为nu​​ll,否则为父值的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;