API 平台 - 提供的值无效(IRI 无效?)。如何与POST发生关系?

API Platform - Invalid value provided (invalid IRI?). How to POST with relations?

我设置了一个非常简单的 Group -> GroupUser -> User 关系(GroupUser 是一个带有附加数据字段的连接 table,Group OneToMany GroupUsers,它有 ManyToOne 组和用户,以及 User 和 OneToMany GroupUser)并失败到 POST 到 API,收到 invalid IRI 错误。对此似乎有一些困惑,我发现了几个 posts (here and here) 但 none 清楚地解决了我最基本的场景(我遵循 API 平台文档并拥有一个需要 api-platform/api-pack 安装的 Symfony4)。

我正在使用 IRI 来关联对象,但是下面的 POST 不起作用(我有一个 ID 为 1 的用户和一个 ID 为 1 的组)并且 returns 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\"}"

这是我的实体:

App/Entity/Group

/**
 * @ORM\OneToMany(targetEntity="GroupUser", mappedBy="group")      
 */
private $users;

App/Entity/User

/**
 * @ORM\OneToMany(targetEntity="GroupUser", mappedBy="user")
 */
private $groups;

App/Entity/Group用户

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

我一定是遗漏了一些基本的东西,但文档似乎不需要任何其他东西。这个 post 没有帮助,我什至为此向 UserGroup 实体添加了一个 id,最初我只有 usergroup 作为 table id。

感谢您的帮助,非常感谢。

我终于想通了,其实我犯了两个错误:

  1. 我将值传递给 __construct 以在构造时填充 GroupUser。我完全删除了 __construct,这对 API 平台和自动 IRI 创建来说效果不佳。

  2. 我在 group_id 和 user_id 上为我的 GroupUser table 使用了复合主键,我放弃了它以支持自己的 ID。

非常简单,这是我添加到 GroupUser 实体的内容:

  /**
   * @var int
   *
   * @ORM\Column(type="integer")
   * @ORM\GeneratedValue(strategy="AUTO")
   * @ORM\Id
   */
  private $id;  

并且不要忘记 getter 方法:

  public function getId(): ?int
  {
    return $this->id;
  }