API Platform - PATCH 和 ArrayCollection
创始人
2024-09-07 02:30:35
0

解决方法如下所示:

在使用API Platform进行PATCH请求时,您可以使用ArrayCollection来更新关联的实体。

首先,您需要确保您的实体关系已正确配置。例如,假设您有两个实体“User”和“Address”,一个用户可以有多个地址。在User实体中,您可以定义一个OneToMany关系:

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class User
{
    // ...

    /**
     * @ORM\OneToMany(targetEntity="Address", mappedBy="user", cascade={"persist", "remove"}, orphanRemoval=true)
     */
    private $addresses;

    public function __construct()
    {
        $this->addresses = new ArrayCollection();
    }

    // ...
}

接下来,您可以在API资源类中使用ArrayCollection来更新关联实体。例如,假设您有一个User资源和一个Address资源,您可以在User资源的PATCH方法中使用ArrayCollection来更新关联的Address实体。

use App\Entity\User;
use App\Entity\Address;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

class UserResource
{
    // ...

    public function patch(User $user, Request $request)
    {
        $content = json_decode($request->getContent(), true);

        // 更新关联的地址
        if (isset($content['addresses'])) {
            $addressesData = $content['addresses'];

            $addresses = new ArrayCollection();

            foreach ($addressesData as $addressData) {
                $address = new Address();
                $address->setStreet($addressData['street']);
                $address->setCity($addressData['city']);
                // 设置其他属性...

                $addresses->add($address);
            }

            $user->setAddresses($addresses);
        }

        // 保存用户实体
        $em = $this->getDoctrine()->getManager();
        $em->flush();

        return $user;
    }

    // ...
}

在上面的示例中,我们假设请求的内容是类似于以下的JSON格式:

{
    "addresses": [
        {
            "street": "123 Main St",
            "city": "New York"
        },
        {
            "street": "456 Elm St",
            "city": "Los Angeles"
        }
    ]
}

这样,您就可以通过使用ArrayCollection来更新关联的实体,将每个地址添加到用户的地址集合中。然后,通过flush()方法将更改保存到数据库中。

希望这个示例能帮助到您!

相关内容

热门资讯

透视讲解!wepoker好友助... 透视讲解!wepoker好友助力码,wepoker底牌透视(都是是真的有挂)1、每一步都需要思考,不...
透视ai代打!wepoker养... 透视ai代打!wepoker养号规律,wepoker有没有挂(果然是真的有挂)1、wepoker有没...
透视科技!wepoker辅助器... 透视科技!wepoker辅助器软件下载,wepoker游戏安装教程(一贯是真的有挂)1、下载好wep...
透视能赢!wepoker透视有... 透视能赢!wepoker透视有没有,wepoker俱乐部辅助器(果然有挂);1)wepoker俱乐部...
透视攻略!wepoker怎么下... 透视攻略!wepoker怎么下载游戏,wepoker怎么破解游戏(本来真的有挂)wepoker怎么破...
透视透视!wepoker轻量版... 透视透视!wepoker轻量版书签,wepoker有透视吗(原来是真的有挂)1、进入游戏-大厅左侧-...
透视中牌率!wepoker免费... 透视中牌率!wepoker免费脚本咨询,wepoker怎么提高运气(一直真的有挂)1、每一步都需要思...
透视辅助!wepoker可以免... 透视辅助!wepoker可以免费玩吗,wepokerplus作弊(一直存在有挂);1)wepoker...
透视最新!wepoker辅助真... 透视最新!wepoker辅助真的假的,wepoker黑侠辅助器(都是真的是有挂)1、打开软件启动之后...
透视了解!wepokerplu... 透视了解!wepokerplus到底是挂了吗,wepoker私人局俱乐部辅助(都是是真的有挂)1、w...