Подресурс платформы Api на настраиваемых отношениях ManyToMany - PullRequest
0 голосов
/ 06 августа 2020

У меня есть следующий сценарий:

/**
 * @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.

...