0

这是我的(简化的)类别实体:

/**
 * @ORM\Entity
 */
class Category
{    
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id = null;

    /**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="children", fetch="EAGER")
     */
    protected $parent = null;

    /**
     * @ORM\OneToMany(targetEntity="Category", mappedBy="parent", fetch="LAZY")
     * @ORM\JoinTable(name="category_tree",
     *      joinColumns={@ORM\JoinColumn(name="parent_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="child_id", referencedColumnName="id")}
     * )
     */
    protected $children;
}

我可以为每个类别编写一个 DQL 查询,它会给我一个结果:

  • 它的标识
  • 一个包含其孩子 ID 的数组

当然,在 SQL 中它非常简单,但在 Doctrine 中连接表似乎是透明的。

4

1 回答 1

0

如果你只需要引用,有一个方便的 getReference() 方法,像这样使用:

$item = $this->em->getReference('Entity\Item', $id);

或者,您可以将关联实体设置为 EXTRA_LAZY。这完全取决于您到底需要什么,但这是减少开销的两种方法。

于 2013-02-18T23:21:26.063 回答