create() 方法內部隱藏第二參數 $type,控制「新增/更新」判斷邏輯:1=MODEL_INSERT、0=MODEL_UPDATE。默認根據數據中是否包含主鍵自動判斷,導致手動指定主鍵值時誤判為更新,進而使自動完成(insert 時機)失效。
$type = $type ? $type : (!empty($data[$this->getPk()]) ? self::MODEL_UPDATE : self::MODEL_INSERT);
// 模型定義:主鍵為 student_id(非自增,業務生成)
protected $_auto = [
['majorid', 'maxmajoridadd1', 1, 'callback'], // 1 = 僅新增時執行
];
// 控制器調用
$data['student_id'] = '20230001'; // 手動指定主鍵
M('Student')->create($data); // 系統判斷有主鍵 → UPDATE → 自動完成不執行!
M('Student')->create($_POST, 1); // 強制聲明為 INSERT 操作
create($data, 1) 修正create(mixed $data = '', mixed $type = '') // $data: 表單數據,空則自動獲取 $_POST // $type: 操作類型,1=新增,0=更新,空=自動判斷
create() 增加日誌或強制類型1新增、2更新、3全部,按業務精確設置// 臨時開啟 SQL 日誌查看實際操作
$model = M('Student');
$model->create($data, 1);
echo $model->getLastSql(); // 確認是 INSERT 還是 UPDATE