Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
尤川豪 Enoxs chenjenping Kevin Hou JuenTingShie
很多 table 寫到後面
會需要加一些類似 cache 的欄位
比方說 relationship 的 count 啦 ... 加起來有點煩
如果養成習慣 都先加一個 metadata 之類的欄位如何?
metadata
想用可以直接用
在 business logic 上意義太大的時候
比如需要進階的 sql
才分離出來成為一個 field
發現 laravel 的 update 無法作用在 json 欄位值為 null 的上面
也就是說 如果 metadata 為 null
\DB::table('users') ->where('id', $user->id) ->update(['metadata->resource_total_count' => $user->resources_count]);
不會真的更新 metadata,也不會 throw error
那麼在 migration 加上 default value 如何?
public function up() { Schema::table('users', function (Blueprint $t) { $t->json('metadata')->default("{}")->after('custom_colors'); }); }
and you will get this
1 PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1101 BLOB, TEXT, GEOMETRY or JSON column 'metadata' can't have a default value")
這作法不可行 會造成更多問題
不過 好像也只是 mysql 5.7 之前
mysql 8 之後好像就可以了
Devs.tw 是讓工程師寫筆記、網誌的平台。隨手紀錄、寫作,方便日後搜尋!
歡迎您一起加入寫作與分享的行列!
本站 devs.tw 已暫緩更新!我寫了一個「新手友善」的全新論壇:CodeLove 愛寫扣論壇!
歡迎前往新網站翻閱文章、與大家交流、分享、互相打氣、一起學習、一起成長!
發現 laravel 的 update 無法作用在 json 欄位值為 null 的上面
也就是說 如果 metadata 為 null
不會真的更新 metadata,也不會 throw error
那麼在 migration 加上 default value 如何?
and you will get this
結論
這作法不可行 會造成更多問題
不過 好像也只是 mysql 5.7 之前
mysql 8 之後好像就可以了