如何使用 Gedmo 嵌套树将多棵树存储在一个 table 中?
How to use Gedmo nested tree for storing multiple trees in one single table?
我有一个 table 为每个用户名存储一棵树。
我的实体如下所示:
/**
* Confsaves
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="confsaves")
*@ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
*/
class Confsaves
{
/**
* @var string
*
* @ORM\Column(name="Name", type="string", length=200, nullable=true)
*/
private $name;
/**
* @var string
*
* @Gedmo\TreeRoot
* @ORM\Column(name="Username", type="string", length=50, nullable=true)
*/
private $username;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Confsaves", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Confsaves", mappedBy="parent")
* @ORM\OrderBy({"lft" = "ASC"})
*/
private $children;
/**
* @var integer
*
* @Gedmo\TreeLeft
* @ORM\Column(name="lft", type="integer", nullable=true)
*/
private $lft;
/**
* @var integer
*
* @Gedmo\TreeRight
* @ORM\Column(name="rght", type="integer", nullable=true)
*/
private $rght;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
我想为每个用户构建不同的树。
在我的控制器中,我创建了这样的存储库:
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('MyBundle:Confsaves');
如何仅在连接的用户上设置存储库的范围?
构建树功能是否需要级别?
我使用的现有数据库只有左、右和父参数。
已经很久了,但记录一下:
如果您想要为每个用户创建一个树,您必须在您的 Confsaves
和 User
实体之间建立关系,更具体地说,在 root
属性 之间建立关系您的 Confsaves
实体和您的 User
实体。 Doctrine Extensions 支持树 since 2.4 的根 属性 上的关系。确保您使用的是正确的版本。调试了我一天。
因此,要将嵌套集树与用户实体相关联,只需在用户中执行 ManyToOne
,并在树实体中执行反向关系。
我有一个 table 为每个用户名存储一棵树。 我的实体如下所示:
/**
* Confsaves
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="confsaves")
*@ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
*/
class Confsaves
{
/**
* @var string
*
* @ORM\Column(name="Name", type="string", length=200, nullable=true)
*/
private $name;
/**
* @var string
*
* @Gedmo\TreeRoot
* @ORM\Column(name="Username", type="string", length=50, nullable=true)
*/
private $username;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Confsaves", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Confsaves", mappedBy="parent")
* @ORM\OrderBy({"lft" = "ASC"})
*/
private $children;
/**
* @var integer
*
* @Gedmo\TreeLeft
* @ORM\Column(name="lft", type="integer", nullable=true)
*/
private $lft;
/**
* @var integer
*
* @Gedmo\TreeRight
* @ORM\Column(name="rght", type="integer", nullable=true)
*/
private $rght;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
我想为每个用户构建不同的树。
在我的控制器中,我创建了这样的存储库:
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('MyBundle:Confsaves');
如何仅在连接的用户上设置存储库的范围? 构建树功能是否需要级别?
我使用的现有数据库只有左、右和父参数。
已经很久了,但记录一下:
如果您想要为每个用户创建一个树,您必须在您的 Confsaves
和 User
实体之间建立关系,更具体地说,在 root
属性 之间建立关系您的 Confsaves
实体和您的 User
实体。 Doctrine Extensions 支持树 since 2.4 的根 属性 上的关系。确保您使用的是正确的版本。调试了我一天。
因此,要将嵌套集树与用户实体相关联,只需在用户中执行 ManyToOne
,并在树实体中执行反向关系。