Правильно создать рекурсивную / рефлексивную связь ManyToMany с доктриной ORM (Symfony)
У меня есть этот объект по имени Pointscomptage.php
:
class Pointscomptage
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="invariant", type="string", length=150, nullable=false)
*/
private $invariant;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=150, nullable=false)
*/
private $nom;
/**
* @var string
*
* @ORM\Column(name="consoProduction", type="string", length=150, nullable=false)
*/
private $consoProduction;
/**
* @var Typesenergie
*
* @ORM\ManyToOne(targetEntity="Typesenergie", inversedBy="pointscomptage")
* @ORM\JoinColumn(name="typesenergie_id", referencedColumnName="id")
*/
private $typesenergie;
/** ... getters and setters */
Мне нужно понять, как создать рекурсивное илирефлексивное отношение ManyToMany для этой сущности.
То есть у Pointcomptage не может быть (0) или много (n) Pointscomptage.
Как сделать это отношение на этой же сущности?
РЕДАКТИРОВАТЬ
Благодаря ответу Йована Перовича и предложению этого решения, которое я нашел, мы должны соблюдать аннотацию доктрины:
/**
* @ORM\ManyToMany(targetEntity="Pointscomptage")
* @ORM\JoinTable(name="pointscomptage_link_table",
* joinColumns={
* @ORM\JoinColumn(name="pointscomptage_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="id_pointscomptage2", referencedColumnName="id")
* }
* )
**/
private $pointscomptages;
Спасибо большое.
1 ответ
Решение
Это можно сделать так же, как и с любой сущностью. Смотрите официальные документы на @ManyToMany
Например:
/**
* @ManyToMany(targetEntity="Pointscomptage")
* @JoinTable(name="pointscomptage_link_table",
* joinColumns={@JoinColumn(name="id_pointscomptage1", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="id_pointscomptage2", referencedColumnName="id")}
* )
**/
private $pointscomptages;
В этом примере предполагается следующее:
- Отношение является однонаправленным. Двунаправленный также легко достигается и описан также в ссылке на документы выше.
- Соединительная таблица названа
pointscomptage_link_table
- Соединительный стол
pointscomptage_link_table
содержит два ключа столбца:- id_pointscomptage1
- id_pointscomptage2
Надеюсь это немного поможет...