使用 Gedmo 扩展在层次结构中获取 Symfony/Doctrine 实体的级别

Getting level of Symfony/Doctrine entity in hierarchical structure with Gedmo extension

我有一个 table (ayrshireminis_car_category),它是用层次结构构建的。

我正在尝试使用 Doctrine Gedmo extension 来提取我在其他地方使用的 "level" 成员变量,所以我希望 parent 的级别为 1 , child 达到 2 级 grandchild 达到 3 级等等...

这是我映射的实体:

AyrshireMinis\CarBundle\Entity\Category:
    type: entity
    table: ayrshireminis_car_category
    gedmo:
        tree:
            type: nested
    id:
        id:
            type: integer
            length: 11
            generator: { strategy: AUTO }
    fields:
        name:
            type: string
            length: 150
        active:
            type: boolean
            default: true
        position:
            type: integer
            length: 11
        level:
            type: integer
            gedmo:
                - treeLevel
        createdAt:
              type: datetime
              gedmo:
                  timestampable:
                      on: create
              column: created_at
        updatedAt:
            type: datetime
            gedmo:
                timestampable:
                    on: update
            column: updated_at
    manyToOne:
        parent:
            targetEntity: AyrshireMinis\CarBundle\Entity\Category
            inversedBy: children
            gedmo:
                - treeParent
        createdBy:
            targetEntity: \Sylius\Component\Core\Model\UserInterface
            joinColumn:
                nullable: false
                name: created_by
            gedmo:
                blameable:
                    on: create
        updatedBy:
            targetEntity: \Sylius\Component\Core\Model\UserInterface
            joinColumn:
                nullable: false
                name: updated_by
            gedmo:
                blameable:
                    on: update
    oneToMany:
        products:
            targetEntity: AyrshireMinis\CarBundle\Entity\Product
            mappedBy: category

使用此映射我得到以下错误:

Missing properties: left, right in class - AyrshireMinis\CarBundle\Entity\Category 500 Internal Server Error - InvalidMappingException

但是,我不想在 table 中出现 "left" 和 "right" 列。我该如何解决这个问题?

在不更改模式并严重依赖 Gedmo 扩展的情况下,我能够像这样提取 "level":

/**
 * get a numeric representation of the press category level
 * i.e. parent categories - 0, child categories - 1, grandchild categories - 2 etc...
 *
 * @return int
 */
public function getLevel()
{
    $level = 0;

    $category = $this;

    // parent category
    if ($category->hasParent() === false) {
        return $level;
    }

    while ($category = $category->getParent()) {
        $level++;
    }

    return $level;
}

/**
 * @return bool
 */
public function hasParent()
{
    return ($this->parent != null ? true : false);
}