我建立了一个非常简单的Group -> GroupUser -> User
关系(GroupUser是具有附加数据字段的联接表,Group OneToMany GroupUsers(具有ManyToOne组和User)以及User和OneToMany GroupUser),并且无法发布到API,收到invalid IRI
错误。对此似乎有些困惑,我在此找到了几篇文章(here和here),但没有一个明确地解决我最基本的情况(我遵循了API平台文档,并在Symfony4中添加了一个需要api-platform/api-pack
安装。
我正在使用IRI关联对象,但是以下POST不起作用(我确实有一个ID为1的用户和ID为1的一个组)并返回了Invalid value provided (invalid IRI?)
错误:
curl -X POST "http://api.platform.local/group_users" -H "accept: application/ld+json" -H "Content-Type: application/ld+json" -d "{ \"group\": \"/groups/1\", \"user\": \"/users/1\", \"role\": \"member\"}"
这是我的实体:
应用/实体/组
/**
* @ORM\OneToMany(targetEntity="GroupUser", mappedBy="group")
*/
private $users;
应用/实体/用户
/**
* @ORM\OneToMany(targetEntity="GroupUser", mappedBy="user")
*/
private $groups;
App / Entity / GroupUser
/**
* @Assert\NotBlank
* @ORM\JoinColumn(
* nullable=false,
* onDelete="CASCADE"
* )
* @ORM\ManyToOne(
* inversedBy="users",
* targetEntity="App\Entity\Group"
* )
*/
private $group;
/**
* @Assert\NotBlank
* @ORM\JoinColumn(
* nullable=false,
* onDelete="CASCADE"
* )
* @ORM\ManyToOne(
* inversedBy="groups",
* targetEntity="App\Entity\User"
* )
*/
private $user;
我必须缺少一些基本知识,但是文档似乎不需要任何其他内容。这篇文章没有帮助,为此我什至为UserGroup实体添加了一个ID,最初我只有user
和group
作为表ID。
非常感谢您的帮助。
答案 0 :(得分:0)
我终于弄清楚了,实际上我犯了两个错误:
我将值传递给__construct,以在构造时填充GroupUser。我完全删除了__construct,这在API平台和自动IRI创建中效果不佳。
我为GroupUser表使用了group_id和user_id上的复合主键,我放弃了它,转而使用了自己的ID。
很简单,这就是我添加到GroupUser实体中的内容:
/**
* @var int
*
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id
*/
private $id;
不要忘记getter方法:
public function getId(): ?int
{
return $this->id;
}