Как использовать вложенное дерево Gedmo для хранения нескольких деревьев в одной таблице?
У меня есть таблица, в которой хранится дерево для каждого имени пользователя. Моя сущность выглядит так
/**
* 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');
Как я могу установить область репозитория только для подключенного пользователя? Нужен ли уровень для функции дерева построения?
Я использую существующую базу данных, которая имеет только левый, правый и родительский аргументы.
1 ответ
Прошло много времени, но для записи:
Если вы хотите дерево для каждого пользователя, вы должны установить отношения между Confsaves
а также User
сущности, более конкретно, между root
собственность вашего Confsaves
сущность и ваш User
один. Doctrine Extensions поддерживает отношения с корневым свойством вашего дерева начиная с 2.4. Убедитесь, что вы используете правильную версию. Стоил мне день отладки.
Итак, чтобы связать ваше дерево вложенных множеств с пользовательской сущностью, просто выполните ManyToOne
в вашем пользователе, и обратные отношения в вашей сущности дерева.