Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

'inversedBy'

Boa tarde pessoal

Eu informo este 'inversedBy' somente quando as duas entidades têm relação de muitos para muitos, certo? Se for um para muitos não poderá usar? Obrigado pela ajuda.

Parte do código da aula que foi usado 'inversedBy':

/**
     * @ManyToMany(targetEntity="Aluno", inversedBy="cursos")
     */
    private $alunos;
3 respostas

Leonardo,

Tudo bem contigo?

Na verdade poderá usar inversedBy também numa relação One-to-One. Quando tiver uma relação 1 para 1, não será criada uma tabela extra para conter as N relações, entretanto um dos lados terá de criar uma chave estrangeira.

O inversedBy servirá para indicar em qual lado da relação será criada a chave estrangeira.

Veja o exemplo de Cart e Customer na documentação do Doctrine, onde a regra do negócio é que existe um carrinho para um cliente:

https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/association-mapping.html

Veja o exemplo: One-To-One, Bidirectional Verá o uso do inversedBy.

Boa noite

Então o elemento que está especificado com o inversedBy que receberá a chave estrangeira certo?

Obrigado pela ajuda.

solução!

Leonardo,

Correto, note no exemplo da documentação do Doctrine, que o elemento que recebe a annotation inversedBy é o 'Cart'.

class Cart
{
    // ...

    /**
     * One Cart has One Customer.
     * @OneToOne(targetEntity="Customer", inversedBy="cart")
     * @JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customer;

E no esquema gerado para o MySQL, é esta entidade/tabela que recebe o atributo de chave estrangeira (Foreign Key):

ALTER TABLE Cart ADD FOREIGN KEY (customer_id) REFERENCES Customer(id);

Caso tenha solucionado a questão, não se esqueça de marcar este tópico como resolvido. Se não, postar aqui ainda quaisquer dúvidas.

Um abraço e bons estudos!