Olá amigos tudo bem? Esse artigo é para vc que precisa fazer um auto relacionamento(Self-reference) utilizando o DOCTRINE.
Existem 3 formas de relacionamentos e vamos aborda-las aqui que são:
1. Um para Um (One-To-One)
2. Um para Muitos (One-To-Many)
3. Muitos para Muitos (Many-To-Many)
Podemos facilmente ter uma referência de qualquer um desses caras, vamos aos exemplos
1. Um para Um (One-To-One Doctrine)
Estudante para mentor, só pode ter um e ele também é estudante. (arrumando o exemplo antigo)
O uso do @JoinColumn é opcional já que seria definido por padrão então pois cnh_id e o id são os mesmos, podemos omiti-lo por padrão.
2. Um para Muitos (One-To-Many)
Imagine um caso de um forum, onde uma opinião pode receber 'n' opiniões (opinião da opinião)
Veja que criamos o atributo forum_opiniao que referencia a ele mesmo e os filhos para armazenar os filhos desse pai.
3. Muitos para Muitos (Many-To-Many)
Um caso onde usuarios poderiam se referenciar
Básico e prático não achou?
Fonte: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html
Existem 3 formas de relacionamentos e vamos aborda-las aqui que são:
1. Um para Um (One-To-One)
2. Um para Muitos (One-To-Many)
3. Muitos para Muitos (Many-To-Many)
Podemos facilmente ter uma referência de qualquer um desses caras, vamos aos exemplos
1. Um para Um (One-To-One Doctrine)
Estudante para mentor, só pode ter um e ele também é estudante. (arrumando o exemplo antigo)
- <?php
- /** @Entity */
- class Estudante
- {
- // ...
- /**
- * @OneToOne(targetEntity="Estudante")
- * @JoinColumn(name="mentor_id", referencedColumnName="id")
- */
- private $mentor;
- // ...
- }
O uso do @JoinColumn é opcional já que seria definido por padrão então pois cnh_id e o id são os mesmos, podemos omiti-lo por padrão.
2. Um para Muitos (One-To-Many)
Imagine um caso de um forum, onde uma opinião pode receber 'n' opiniões (opinião da opinião)
- class ForumOpiniao {
- /**
- * @OneToMany(targetEntity="ForumOpiniao", mappedBy="forum_opiniao", cascade={"persist", "remove"})
- */
- private $filhos;
- /**
- * @ManyToOne(targetEntity="ForumOpiniao", inversedBy="filhos")
- * @JoinColumn(name="forum_opiniao", referencedColumnName="id")
- */
- private $forum_opiniao;
- //.....
- }
Veja que criamos o atributo forum_opiniao que referencia a ele mesmo e os filhos para armazenar os filhos desse pai.
3. Muitos para Muitos (Many-To-Many)
Um caso onde usuarios poderiam se referenciar
- <?php
- /** @Entity */
- class User
- {
- // ...
- /**
- * @ManyToMany(targetEntity="User", mappedBy="myFriends")
- */
- private $friendsWithMe;
- /**
- * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe")
- * @JoinTable(name="friends",
- * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
- * inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")}
- * )
- */
- private $myFriends;
- public function __construct() {
- $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection();
- $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection();
- }
- // ...
- }
Básico e prático não achou?
Fonte: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html
