尤川豪   ·  2年前
445 貼文  ·  275 留言

mysql 設計各張 table 的時候預留一個 json field 如何?

很多 table 寫到後面

會需要加一些類似 cache 的欄位

比方說 relationship 的 count 啦 ... 加起來有點煩

如果養成習慣 都先加一個 metadata 之類的欄位如何?

想用可以直接用

在 business logic 上意義太大的時候

比如需要進階的 sql

才分離出來成為一個 field

  分享   共 1,072 次點閱
按了喜歡:
共有 1 則留言
尤川豪   ·  2年前
445 貼文  ·  275 留言

發現 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 之後好像就可以了

 
您的留言
尤川豪
445 貼文  ·  275 留言

Devs.tw 是讓工程師寫筆記、網誌的平台。隨手紀錄、寫作,方便日後搜尋!

歡迎您一起加入寫作與分享的行列!

查看所有文章