我有一个产品类别表,如果parent_id为null,我存储了类别,然后假设这是父类别,如果不是null,那么它有子类别。现在问题是我无法在列表页面中显示父类别名称,那么有人可以知道如何在产品类别实体中建立关系吗?
Symfony version: 3.3
表格结构:(product_category)
id
parent_id
slug
title
我在ProductCategory实体中尝试过此代码,但它没有显示任何关系数据:
class ProductCategory
{
/**
* @ORM\OneToMany(targetEntity="ProductCategory", mappedBy="parent")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
*/
private $parent;
答案 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