有没有办法在实体创建资源上传递已创建的相关实体的ID数组?默认文档说明了在post请求中创建所有内容。
一些数据。
我有Squad
实体:
/**
* @ApiResource(iri="http://schema.org/Squad")
* @ORM\Table(name="squads")
* @ORM\Entity()
*/
class Squad
{
use IdentityAutoStrategy, Timestamps;
/**
* @var string
* @ORM\Column(type="string", length=25, unique=true)
*/
private $name;
/**
* @var Collection|User[]|null
* @ORM\OneToMany(targetEntity="User", mappedBy="squad")
* @ApiProperty(
* attributes={
* "swagger_context"={
* "$ref"="#/definitions/User",
* }
* }
* )
* @ApiSubresource(max_depth=1)
*/
private $users;
User
实体:
/**
* @ApiResource()
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="GPL\Repository\UserRepository")
*/
class User implements UserInterface, Serializable
{
use Timestamps, IdentityAutoStrategy;
/**
* @ORM\Column(type="string", length=25, unique=true)
*/
private $username;
/**
* @ORM\Column(type="string", length=64)
*/
private $password;
/**
* @ORM\Column(type="string", length=254, unique=true)
*/
private $email;
/**
* @ORM\Column(name="is_active", type="boolean")
*/
private $isActive;
/**
* @var Squad
* @ORM\ManyToOne(targetEntity="Squad", inversedBy="users")
* @ORM\JoinColumn(name="squad_id", referencedColumnName="id")
* @ApiProperty(
* attributes={
* "swagger_context"={
* "$ref"="#/definitions/Squad",
* }
* }
* )
*/
private $squad;
我想要实现的主要功能是发送POST /api/squads
"users": [1,2,3]
,其中1,2,3是现有用户的ID,并将它们链接到已创建的Squad
实体。这可以使用api-platform的一些默认注释吗?或者我该怎么做?
答案 0 :(得分:2)
对于JSON-LD,你可以使用这样的IRI:
users: ["users/1", "users/2"]
请注意,如果您在用户资源中禁用GET项目操作,这将无法正常工作。
您还可以强制执行此操作并禁用嵌入数据,以防止客户通过排除所有用户字段组来创建新用户。
/**
* @ApiResource(attributes={
* "normalization_context"={"groups"={"squad", "squad:user", "user"}},
* "denormalization_context"={"groups"={"squad", "squad:user"}}
* })
*/
class Squad
{
...
/**
* ...
* @Groups("squad")
*/
private $name;
/**
* ...
* @Groups("squad:user")
*/
private $users;
...
class User
{
/**
* ...
* @Groups("user")
*/
private $username;
...