为了账号安全,请及时绑定邮箱和手机立即绑定

在幂等情况下通过服务更新实体的最佳方式?

在幂等情况下通过服务更新实体的最佳方式?

PHP
炎炎设计 2022-10-22 15:09:00
假设我有实体:class UserEntity{    /**     * @var integer     * @ORM\Id     * @ORM\Column(type="integer")     * @ORM\GeneratedValue(strategy="IDENTITY")     */    private $id;    /**     * @var string     * @ORM\Column(type="string")     */    private $name;    /**     * @var string     * @ORM\Column(type="string")     */    private $email;// and contruct, getters and setters..}并在相应的服务中:class UserService extends BaseService{    public function update($id, $data)    {        try {            $user= $this->fetch($id);            if (! $user instanceof UserEntity) {                // throw respective exception;            }            $user->setName($data['name']);            $user->setEmail($data['email']);            $this->entityManager->flush($user);            return $user;        } catch (Exception $e) {            throw $e;        }     }}如果有这样的用户:{    id: 1,    name: jhon,    email: jhon@domain.com}并且提供给服务的数据是:$id = 1;$data = [     'name' => jhon,     'email => jhon@domain,com]那么,在这些情况下,避免对数据库进行不必要的查询的最佳方法是什么?因为没有必要调用 flush 方法。还是 Doctrine 内部负责不做查询?
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

根据当前文档

刷新操作适用于具有以下语义的托管实体:

  • 实体本身使用 SQL UPDATE 语句同步到数据库,前提是至少有一个持久性字段已更改。

  • 如果实体未更改,则不会执行任何 SQL 更新。

当实体成为托管实体时(根据它们的 ORMInvalidArgumentExceptions 之一):

如果实体从数据库中获取或通过 EntityManager#persist 注册为新实体,则该实体被管理

所以,是的,Doctrine 会为你做出决定。


查看完整回答
反对 回复 2022-10-22
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信