問題產生
good_orders表 (商品訂單表)
addr_id 關聯的地址表id
good_id 關聯商品表id
user_id 關聯的使用者表id
....
goods (商品表)
title 名字
img 封面
price 價格
....
addresses (地址表)
......
- 如果運維修改
商品 (goods)
,那麼商品訂單表
隨之受到影響。 - 使用者修改
地址 (address)
,那麼地址也會隨之受到影響。
如何避免這種情況 ?
(普遍解決方案: 就是商品訂單表增加 good_title
good_img
….)
我的解決方案 (很像 快照(備份)模式
)
建立 good_orders
時,
新增一條goods
資料 和 addresses
資料。
然後修改關聯的欄位。 (good_id
和addr_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
測試
測試前 (goods表截不全 )
測試後 (goods表截不全)
待優化 (需自行實現)
很多條資料怎麼辦?
運維
: 怎麼突然多這麼多的商品!
解決思路: 加個軟刪除
或者 status
是否顯示……
造成資料表很大?
那就建立一個 goods_tmp
addresses_tmp
表唄
訂單查詢的時候, 往goods_tmp
addresses_tmp
去查。
(是否有必要而已)
本作品採用《CC 協議》,轉載必須註明作者和本文連結