Получение уровня сущности Symfony / Doctrine в иерархической структуре с расширением Gedmo

У меня есть стол (ayrshireminis_car_category), который построен с иерархической структурой.

Я пытаюсь использовать Расширение Доктрины Гедмо вытащить переменную-член «level», которую я использую в другом месте, поэтому я ожидаю, что у родителя будет уровень 1, у ребенка — уровень 2, у внука — уровень 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

С этим отображением я получаю следующую ошибку:

Недостающие свойства: слева, справа в классе —
AyrshireMinis \ CarBundle \ Entity \ Category 500 Внутренняя ошибка сервера —
InvalidMappingException

Тем не менее, я не хочу, чтобы «левый» и «правый» столбец в моей таблице. Как я могу обойти это?

0

Решение

Не изменяя схему и сильно полагаясь на расширение Gedmo, я смог извлечь «уровень» следующим образом:

/**
* 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]