使用 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);
}
我有一个 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);
}