0

我有一个Category旨在代表论坛类别的实体。我使用StofDoctrineExtensionsBundle它是为了使用它的Tree注释,以便在类别中有层次结构。现在,我想用一个字符串来表示该层次结构,比如Category/Subcategory/Subsubcategory/Foo. 如何使用 Doctrine 在一个独特的请求中获取所有层次结构?

// Category.php

use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;

/**
 * @Gedmo\Tree(type="nested")
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="PC\ForumBundle\Entity\Repository\CategoryRepository")
 */
class Category
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue
     */
    private $id;

    /**
     * @ORM\Column(length=64)
     */
    private $title;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

    /**
     * @Gedmo\Slug(fields={"title"})
     * @ORM\Column(length=64, unique=true)
     */
    private $slug;

    /**
     * @Gedmo\TreeLeft
     * @ORM\Column(type="integer")
     */
    private $lft;

    /**
     * @Gedmo\TreeRight
     * @ORM\Column(type="integer")
     */
    private $rgt;

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

    /**
     * @Gedmo\TreeRoot
     * @ORM\Column(type="integer", nullable=true)
     */
    private $root;

    /**
     * @Gedmo\TreeLevel
     * @ORM\Column(name="lvl", type="integer")
     */
    private $level;

    /**
     * @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
     */
    private $children;

// ...
4

2 回答 2

1

补充帕拉答案

存储库代码:

namespace Foo\MyBundle\Entity;

use Doctrine\ORM\EntityRepository;
use Gedmo\Tree\Entity\Repository\NestedTreeRepository;

class CategoryRepository extends NestedTreeRepository
{
}

Twig 代码示例(引导程序):

  <ol class="breadcrumb">
      <li><a href="{{ path('...') }}"><i class="fa fa-home"></i></a></li>
      {% for p in path %}
      <li><a {% if loop.last  %}class="active"{% endif %}
       href="{{ path(...) }}">{{ p.name }}</i></a></li>
      {% endfor %}
 </ol>
于 2016-04-05T10:23:03.253 回答
0

我终于找到了方法:

  • 使您的存储库类扩展Gedmo\Tree\Entity\Repository\NestedTreeRepository
  • 调用方法getPath($node)就可以了。

例子 :

// Assuming $category is provided by a ParamConverter
public function indexAction(Category $category = null)
{
    return array(
        'category' => $category,
        'path' => $this->repo->getPath($category)
    );
}
于 2014-07-22T18:13:08.087 回答