Laravel 修改資料與原資料一樣 導致沒有執行sql

lyxxxh發表於2020-11-15

程式碼


$openid = "123"; // 微信openid
User::WhereIn("id",['1','2','3'])->update([
  'openid' => $openid
]);

$user = User::find(1);

// 取消所有這個openid的繫結者
User::Where(['openid' => $openid])->update([
  'openid' => null
]);

// 給1號使用者繫結openid
$user->openid = $openid;
$user->save();

問題: openid = 123 有幾個?
答案: 一個都沒有。

原因

程式碼極簡單

getDirty 會返回 $useroriginal(查詢出來的 不允許改變) 和 attributes(手動賦值的) 不同的地方,

最後發現屬性都一樣,所以 $user->save() 不會執行修改。

扯淡

微信繫結 的時候發現不對勁,還以為是 laravel 或者 mysqlbug :sweat_smile:

當然

本作品採用《CC 協議》,轉載必須註明作者和本文連結
專心學習不瞎搞

相關文章