Laravel的mysql資料分離想法

lyxxxh發表於2020-07-18

問題產生

good_orders表 (商品訂單表)
    addr_id  關聯的地址表id
    good_id  關聯商品表id
    user_id  關聯的使用者表id
    ....


goods (商品表)
    title 名字 
    img 封面
    price 價格
    .... 

addresses (地址表) 
    ......
  1. 如果運維修改商品 (goods),那麼商品訂單表隨之受到影響
  2. 使用者修改地址 (address),那麼地址也會隨之受到影響

如何避免這種情況 ?
(普遍解決方案: 就是商品訂單表增加 good_title good_img….)

我的解決方案 (很像 快照(備份)模式)

建立 good_orders時,
新增一條goods資料 和 addresses資料。

然後修改關聯的欄位。 (good_idaddr_id)

實現 (勿直接用 看最後面的”待優化”)

新建一個類

<?php

namespace App\Services;
trait ModelTrait
{

    public function copy($remote)
    {
        if( $this->$remote == null) // 模型關聯不存在
        return true;

        $new_model = clone $this->$remote; // 要新增的資料

        $primaryKey = $new_model->getKeyName(); // 主鍵
        $new_model->$primaryKey = null; // 要把主鍵設定為null,不能存在兩個相同的資料
        $new_model->exists = false;  // 設定為false才會新增  true會修改
        if( $new_model->save()){  // 新資料儲存成功
        $foreignKey = $this->$remote()->getForeignKeyName();

         $this->$foreignKey = $new_model->id;  
        // 修改關聯的外來鍵值 如(`good_id` `addr_id`)

          return $this->save();
        }
        return  false;
    }

}

使用 use

Laravel的mysql資料分離想法

測試

Laravel的mysql資料分離想法

測試前 (goods表截不全 )

Laravel的mysql資料分離想法

測試後 (goods表截不全)

Laravel的mysql資料分離想法

待優化 (需自行實現)

很多條資料怎麼辦?

運維: 怎麼突然多這麼多的商品!

解決思路: 加個軟刪除 或者 status是否顯示……

造成資料表很大?

那就建立一個 goods_tmp addresses_tmp表唄

訂單查詢的時候, 往goods_tmp addresses_tmp去查。

(是否有必要而已)

本作品採用《CC 協議》,轉載必須註明作者和本文連結

專心學習不瞎搞

相關文章