如何更新 OneToMany 资源
How to update OneToMany ressource
我是 API 平台的初学者。我正在与两个具有 OneToMany
关系的实体 Author
和 Book
合作:
- 一个用户可以拥有多本书
- 一本书只能属于一个作者。
我试过POST
、GET
和DELETE
方法,它们都有效。但是,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 来说是必不可少的。
我是 API 平台的初学者。我正在与两个具有 OneToMany
关系的实体 Author
和 Book
合作:
- 一个用户可以拥有多本书
- 一本书只能属于一个作者。
我试过POST
、GET
和DELETE
方法,它们都有效。但是,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 来说是必不可少的。