这是我的(简化的)类别实体:
/**
* @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 中连接表似乎是透明的。