數據庫中建立一個以txt作格式的欄位
$data = [
'title' => $request->title,
'user_name' => $request->user_name
];
$topic->data = json_encode($data);
$topic->save();
這樣便會才json 格式寫入SQL
讀取時在blade中
{{json_decode($topic->data)->title}}
{{json_decode($topic->data)->user_name}}
在Controller 中按條件搜尋
Topic::where("data->user_name", $user_name)->first();
為什麼?使用 Json 來保存的原因?
其實應該是前言?因為內容太簡單,而為什麼要用json 的理由太長.....
為什麼?
我在以前做某些系統「數據庫規劃」時經常遇到的問題,就是明明是同一個架構中的東西,但該條記錄的規格或架構卻完全不同
比如:
產品A 的產品詳情
:
欄位 | 內容 |
---|---|
名稱 | 香蕉 |
長度(CM) (INT) | 15 |
重量(克) (INT) | 125 |
售價(INT) | 5.6 |
但產品B的產品詳情
:
欄位 | 內容 |
---|---|
名稱 | ABC機械鍵盤 |
種類 (VARCHAR) | 黑軸 |
鍵數 (INT) | 87 |
售價 (VARCHAR) | 聯絡我們的客服查詢 |
以上這類情況大家遇過嗎?或者我舉的例子不是太好,但如果真的要滿足上面的方法,小弟不才只能想到2個方法
方法1,把所有有可能出現的欄位都建立好 方法2,為不同類別的產品建立不同的Model ,建立不同類型的SQL表
但如果是用了json 去保存,跟本不會在這些問題,或者你會問,那在前台顯示時,模版不是要寫非常多的IF
? if 長度沒有,就不顯示長度之類的?
其實不是,在以json 保存內容的時候,其實我會再新增一個類似叫type的欄位,把他們分類,比如上面的例子,產品a會把他設定 type=1(水果) ,產品B 設為 type=2 (鍵盤),然後前台就按照type 的值分別載入不同的模板
這樣做解決了什麼?
就是原本有少少差異化的東西,是需要分2張數據表(table)去做,現在只需要用1張數據表就ok
我也是因為使用Laravel notifications,而深入了解一下他的數據邏輯,其實wordpress也早就這樣去做設定,不然怎麼可能一個程式可滿足那麼多不同需要的人?
關聯式數據庫的支援
我是用mysql / mariadb,其實支援已經不錯了,但如果想大量使用json 或者建議你了解一下PostgreSQL ,印象中對json 的支援會更有優勢?!