自定义ManyToMany关系的Api平台子资源

时间:2020-08-06 18:08:19

标签: symfony api-platform.com

我有以下情况:

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

0 个答案:

没有答案