Symfony Gedmo树

时间:2018-07-19 19:12:51

标签: symfony tree treeview symfony4 gedmo-tree

Gedmo树可用于项目和子产品等。但是我遇到的情况是我在产品和类别(多对多)之间建立了连接表。

每个产品可以通过许多类别进行连接。每个类别可以有许多产品。在我的产品视图中,有一个选项可以连接多个类别。

我遇到的问题有点难以解释。 我有一个包含所有类别的视图,其中一个类别可以包含子类别。

  1. cat1(显示产品)

    1.1 cat1-1(显示产品)

    1.2 cat1-2(显示产品)

每个类别,甚至子类别都有一个链接,该链接打开一个包含所有与产品相关的新页面。 我需要找到一种基于theire类别对这些产品进行排序的方法,这就是我正在尝试使用Gedmo Tree进行的处理。

请参见下面的实体,即连接实体。

问题在于Gedmo不会区分您所在的类别。它只是继续计算 lft rgt

我希望我已经清楚地描述了我的问题,并且有人可以解决。

也许我可以使用Gedmo treeRoot?但是不知道treeRoot可以在哪里使用

<?php
/**
 * ProductCategory
 */
namespace XBS\AppBundle\Entity;

use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * ProductCategory
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ProductCategoryRepository")
 * @Gedmo\Tree(type="nested")
 * ...
 */
class ProductCategory
{

    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product", inversedBy="productCategories")
     * @Assert\NotNull()
     */
    protected $product;

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category", inversedBy="productCategories")
     * @Assert\NotNull()
     */
    protected $category;

    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category", inversedBy="children" )
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $parent;

    /**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Category", mappedBy="parent")
     * @ORM\OrderBy({"lft" = "ASC"})
     */
    protected $children;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * setProduct
     * 
     * @param null $product
     * @return $this
     */
    public function setProduct($product = null)
    {
        $this->product = $product;

        return $this;
    }


    /**
     * getProduct
     * @return mixed
     */
    public function getProduct()
    {
        return $this->product;
    }

    /**
     * setCategory
     * 
     * @param null $category
     * @return $this
     */
    public function setCategory($category = null)
    {
        $this->category = $category;

        return $this;
    }

    /**
     * getCategory
     * @return mixed
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     *  @return String empty
     */
    public function __toString(){
        return '';
    }
}

0 个答案:

没有答案