要使用ApiPlatform PUT关联多个实体,可以使用注解来指定关联实体的属性。以下是一个使用注解的示例解决方法:
假设有两个实体:Order
和Product
,一个订单可以包含多个产品。
Order
实体中添加一个属性来关联产品:use ApiPlatform\Core\Annotation\ApiProperty;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Order
{
// ...
/**
* @var Collection|Product[]
*
* @ORM\ManyToMany(targetEntity="Product")
* @ApiProperty(iri="http://schema.org/Product")
*/
public $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
// ...
}
Product
实体中添加一个属性来关联订单:use ApiPlatform\Core\Annotation\ApiProperty;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Product
{
// ...
/**
* @var Collection|Order[]
*
* @ORM\ManyToMany(targetEntity="Order", mappedBy="products")
* @ApiProperty(iri="http://schema.org/Order")
*/
public $orders;
public function __construct()
{
$this->orders = new ArrayCollection();
}
// ...
}
PUT
方法来关联多个实体:use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiSubresource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ApiResource
* @ORM\Entity
*/
class Order
{
// ...
/**
* @var Collection|Product[]
*
* @ORM\ManyToMany(targetEntity="Product")
* @ApiProperty(iri="http://schema.org/Product")
* @ApiSubresource
*/
public $products;
// ...
}
现在,您可以使用PUT
请求来更新订单并关联多个产品。请求的主体应该包含关联产品的标识符列表。例如:
PUT /orders/{orderId}
{
"products": ["/products/1", "/products/2", "/products/3"]
}
在上面的示例中,订单将与产品1、2和3关联起来。