如何更新 OneToMany 资源

How to update OneToMany ressource

我是 API 平台的初学者。我正在与两个具有 OneToMany 关系的实体 AuthorBook 合作:

我试过POSTGETDELETE方法,它们都有效。但是,PUT 方法不起作用并且 returns 此错误:

"hydra:title": "An error occurred",

"hydra:description": **"An exception occurred while executing 'UPDATE Book SET author_id = ? WHERE id = ?' with params [null, 1]:\n\nSQLSTATE[23000]:

Integrity constraint violation: 1048 Column 'author_id' cannot be null"

这是我的代码:

/**
 * @ORM\Entity(repositoryClass="App\Repository\AuthorRepository")
 * @ApiResource(
 *          normalizationContext={"groups"={"book:output"}},
 *          denormalizationContext={"groups"={"book:input"}}
 * )
 */
class Author
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"book:input"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups({"book:output", "book:input"})
     */
    private $firstname;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups({"book:output", "book:input"})
     */
    private $lastname;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Book", mappedBy="author", cascade={"all"})
     * @Groups({"book:output", "book:input"})
     */
    private $books;
/**
 * @ORM\Entity(repositoryClass="App\Repository\BookRepository")
 * @ApiResource()
 */
class Book
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"book:output", "book:input"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups({"book:output", "book:input"})
     */
    private $name;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Author", inversedBy="books")
     * @ORM\JoinColumn(nullable=false)
     */
    private $author;

您似乎为更新的实体传递了一个空 ID,这对于 ORM 来说是必不可少的。