У меня есть следующий сценарий:
/**
* @ApiResource()
*/
class Book {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $title;
/**
* @ORM\OneToMany(targetEntity="App\Entity\BookLibrary", mappedBy="book")
*/
private $bookLibraries;
/**
* @ApiSubresource()
*/
private $libraries;
// Getters and setters
public function getLibraries() {
if (!$this->libraries) {
$this->libraries = new ArrayCollection();
foreach ($this->getBookLibraries() as $bookLibrary) {
$this->libraries->add($bookLibrary->getLibrary());
}
}
return $this->libraries;
}
}
class Library {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\BookLibrary", mappedBy="library")
*/
private $bookLibraries;
private $books;
// Getters and setters
public function getBooks() {
if (!$this->books) {
$this->books = new ArrayCollection();
foreach ($this->getBookLibraries() as $bookLibrary) {
$this->books->add($bookLibrary->getBook());
}
}
return $this->books;
}
}
class BookLibrary {
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="App\Entity\Library", inversedBy="bookLibraries")
* @ORM\JoinColumn(nullable=false)
*/
private $library;
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="App\Entity\Book", inversedBy="bookLibraries")
* @ORM\JoinColumn(nullable=false)
*/
private $book;
/**
* @ORM\Column(type="integer")
*/
private $timesOpened;
// getters and setters
}
Однако при попытке получить подресурс возвращается:
{
"@context": "/api/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "[Syntax Error] line 0, col 54: Error: Unexpected 'WHERE'"
...
}
Возможно ли создать такой подресурс, в котором связующее отношение просто хранит внутренние данные? Нужно ли мне для этого создавать DTO? Как лучше всего решить эту проблему?
Платформа API - это v2.5.6.