Symfony父子类别关系

时间:2017-06-04 07:31:41

标签: php symfony

我有一个产品类别表,如果parent_id为null,我存储了类别,然后假设这是父类别,如果不是null,那么它有子类别。现在问题是我无法在列表页面中显示父类别名称,那么有人可以知道如何在产品类别实体中建立关系吗?

Symfony version: 3.3

表格结构:(product_category)

  id
  parent_id
  slug
  title

enter image description here

我在ProductCategory实体中尝试过此代码,但它没有显示任何关系数据:

class ProductCategory
{
    /**
    * @ORM\OneToMany(targetEntity="ProductCategory", mappedBy="parent")
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
    */
    private $parent;

2 个答案:

答案 0 :(得分:3)

我通常使用儿童和父母,这就是我使用它的方式:

    /**
     * One ProductCategory has Many ProductCategories.
     * @ORM\OneToMany(targetEntity="ProductCategory", mappedBy="parent")
     */
    private $children;

    /**
     * Many ProductCategories have One ProductCategory.
     * @ORM\ManyToOne(targetEntity="ProductCategory", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
     */
    private $parent;

修改

   /**
     * ProductCategory constructor.
     */
    public function __construct()
    {
        $this->children = new ArrayCollection();
    }

Getters / Setters和这些东西:

   /**
    * @param ProductCategory $children
    * @return $this
    */
   public function addChildren (ProductCategory $children)
   {
       $this->children[] = $children;

       return $this;
   }

答案 1 :(得分:1)

正如Alessandro所描述的那样,使用带有自引用的实体,然后让我们说你使用$ qb->(bla bla bla) - > getResult();变成一个名为$ categories的变量。然后你只需要像这样迭代它:

foreach($categories as $category) {
   echo $category->getTitle() . ' has parent ' . ($category->getParent() ? $category->getParent()->getTitle() : 'none'); 
}

要了解有关数组集合的更多信息,请阅读:http://www.doctrine-project.org/api/common/2.3/class-Doctrine.Common.Collections.ArrayCollection.html