亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在冪等情況下通過服務更新實體的最佳方式?

在冪等情況下通過服務更新實體的最佳方式?

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: [email protected]}并且提供給服務的數據是:$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 關注
  • 129 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號