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

Dúvida em mappedBy e inversedBy

Estou com uma dúvida, ao usar o inversedBy ou mappedBy, não entendi como deve ser esse parametro

 #[ManyToMany(targetEntity: Course::class, inversedBy: "students")]

ou

    #[ManyToMany(Student::class, mappedBy: "courses")]

Porque em students ou courses? Poderia ser algum outro nome?

3 respostas

Olá, Marcos! Tudo joia?

Os conceitos de "mappedBy" e "inversedBy" possam gerar algumas dúvidas no início, mas vou tentar esclarecer isso para você.

O "mappedBy" e o "inversedBy" são usados para definir o lado proprietário e o lado inverso de uma relação bidirecional. No Doctrine, apenas um lado de uma relação bidirecional pode ser o proprietário. Isso significa que este é o lado que gerencia a relação (persiste, remove, etc.) e que o Doctrine usa para verificar as mudanças.

Vamos usar o exemplo de uma relação entre um curso e um estudante.

#[ManyToMany(targetEntity: Course::class, inversedBy: "students")]

Neste caso, estamos dizendo que a entidade Course é o lado inverso da relação e que o campo students nesta entidade é o que mapeia a relação.

#[ManyToMany(Student::class, mappedBy: "courses")]

Aqui, estamos dizendo que a entidade Student é o lado proprietário da relação e que o campo courses nesta entidade é o que mapeia a relação.

Então, quando você pergunta se poderia ser algum outro nome, a resposta é sim, desde que esses nomes correspondam aos campos nas entidades que mapeiam a relação. Por exemplo, se você tivesse um campo registeredCourses na entidade Student, então você mudaria para:

#[ManyToMany(Student::class, mappedBy: "registeredCourses")]

E na entidade Student, você teria algo como:

#[ManyToMany(targetEntity: Course::class, inversedBy: "registeredStudents")]

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi Armano, blz e vc?

O conceito consegui compreender, mas o que seria o campo students nesta entidade? Ainda não compreendi o que seria students ou courses?

Esse students seria o private Collection $students?

solução!

Opa Marcos!

Os termos students e courses referem-se aos campos nas entidades envolvidas em um relacionamento Many-to-Many no contexto de um mapeamento de banco de dados com um ORM.

Vamos analisar ambos os exemplos:

  1. Exemplo 1:

    #[ManyToMany(targetEntity: Course::class, inversedBy: "students")]
    

    No exemplo acima, students é o nome do campo na entidade Course que representa os alunos associados a um curso. Provavelmente, o código da entidade Course terá algo semelhante a:

    /**
     * @ManyToMany(targetEntity="Student", inversedBy="courses")
     * @JoinTable(name="courses_students")
     */
    private Collection $students;
    

    Aqui, inversedBy indica que, na entidade Student, existe um campo chamado courses que representa os cursos associados a um aluno.

  2. Exemplo 2:

    #[ManyToMany(Student::class, mappedBy: "courses")]
    

    Neste exemplo, courses é o nome do campo na entidade Student que representa os cursos associados a um aluno. Provavelmente, o código da entidade Student terá algo semelhante a:

    /**
     * @ManyToMany(targetEntity="Course", mappedBy="students")
     */
    private Collection $courses;
    

    Aqui, mappedBy indica que, na entidade Course, existe um campo chamado students que representa os alunos associados a um curso.

Portanto, os nomes students e courses não são fixos e podem ser escolhidos conforme a convenção ou preferência do desenvolvedor. O importante é garantir que esses nomes correspondam aos campos nas entidades envolvidas e a configuração seja consistente entre as duas entidades para que o mapeamento do banco de dados e as relações funcionem corretamente.

Espero ter esclarecido esse ponto!