TP5中update時避免驗證字段重複的解決方法

2021-08-23 12:14:38 字數 863 閱讀 4318

比如當你修改乙個前台輪播圖的資訊,其他資訊要修改後,只有排序這個關鍵字段不需要修改(排序在資料庫中字段為sort,字段資料為1、2、3、4),但是在驗證裡邊寫了unique驗證規則(排序不能重複),那麼此時修改某條資訊時就會顯示排序不能重複的在驗證器裡寫自定義的報錯資訊(此處排序就是前台輪播圖要顯示的順序),但是此時不需要改當前的排序。此時刪掉整條資訊再新增會很不友好,如果在更新時的驗證場景中去掉unique這個規則的話,那麼當需要改排序的時候就會沒有這個驗證規則,就會容易造成修改的排序與現有的排序產生衝突。此時,只要加乙個條件判斷即可解決以上問題:

public function update()

if(db('services')->update($data))//此處把id寫到了data陣列裡,所以此處省略了where

else

return ;//加乙個return將不再顯示下面的語句

}else

if(db('services')->update($data))//此處把id寫到了data陣列裡,所以此處省略了where

else

return ;//加乙個return將不再顯示下面的語句}}

return $this->fetch('update');

}

思想大概如下:因為修改時整條記錄都修改,而其中有些關鍵字是不能重複的(由於unique的唯一性驗證)

,所以避免該問題的方法就是把作為unique的驗證的關鍵字段單獨拉出來,

加一條if語句(如果是多個,那就是多條if語句的問題),

如果該欄位需要修改時就把該字段放入提交的陣列中,如果不需要修改是在陣列中就不用再加入該欄位

。也就是在更新時提交的陣列中加與不加該關鍵字段的問題。

TP5中belongsTo跟hasOne的區別

在使用tp5模型的orm的時候出現belongsto和hasone都有表示一對一的關係,但是二者並不相同。以下舉例說明兩者的區別 首先有user表 字段 id name password欄位 然後有user address表 id user id city欄位 在user模型中關聯user addr...

tp5中的配置機制

如果在index.php初始化中調整配置路徑,那麼extra資料夾也要調整到那個路徑中去。讀取配置檔案 file index.php date 2016 8 23 16 03 10 author zhenxun du 5552123 qq.com version svn id use think c...

TP5中find in set的用法

id 4 db name menu where find in set id,pid all id id update field title map exp find in set 2,needid db where map select 要達到這樣子查詢 1 首先引用 use think db ...