Делаю проект на Symfony.
У меня есть две сущности: "Книга" и "Автор".
По задумке у каждой книги может быть несколько авторов, а каждый автор может написать несколько книг.
Для этого я решил связать их отношением ManyToMany.
Сначала, с помощью генератора, я создал сущность "Автор", затем "Книга".
В результате я получил в базе данных новую таблицу "book_author" для связи этих двух таблиц.
Теперь в коде я могу получить массив всех авторов данной книги:
$authorCollection = $book->getAuthor();
Однако мне так же нужна обратная операция - получить аналогичным способом все книги определенного автора.
Я добавил необходимые методы и свойства в Author, аналогичные тем, что были в Book.
$bookCollection = $author->getBook();
Однако я получаю такую ошибку:
An exception occurred while executing a query: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'app.author_book' doesn't exist
Т.е. скрипт пытается найти таблицу "author_book" а не "book_author".
Вот код сущности Author:
<?php
namespace App\Entity;
use App\Repository\AuthorRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: AuthorRepository::class)]
class Author
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
#[ORM\ManyToMany(targetEntity: Book::class, cascade: ['persist'])]
private Collection $book;
public function __construct()
{
$this->book = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return Collection<int, Book>
*/
public function getBook(): Collection
{
return $this->book;
}
public function addBook(Book $book): self
{
if (!$this->book->contains($book)) {
$this->book->add($book);
}
return $this;
}
}