簡介
tp5.x 提供了豐富的數據模型和數據庫操作的方法,只要涉及 think\Model
think\Query
等,其中有一個軟刪除
的 feature,可以指定字段$deleteTime來標記 record 是否刪除。這個字段使用 NULL 來判斷 record 有沒有被標記。如果在標記為軟刪除下情況下,要恢復標記為刪除的 record 就不能用 update save 了,因為如果你直接賦值 (PHP)null
,這個字段就會被忽略, 不會對數據庫的這個字段進行操作,SO fuck it.
其實在where
方法中提供了操作為exp
的形式
$user = new User;
$user->where('delete_time', 'exp', 'is not null')->field(true)-select();
#來選擇沒有被刪除的 records
但是 update()
和 save()
都是不支持 exp
操作的,例如下面的操作都不可行
$ok = $user->where('id',$id)->update(['delete_time' => ['exp', 'NULL']]); # not working, returns 0
$ok = $user->where('id',$id)->update(['delete_time' => null]]); # omitted, returns 0
$ok = $user->where('id',$id)->update(['delete_time' => 'NULL']); # not working, returns 0
所有使用 think\Db
類來對數據表直接操作,而不是基於模型來操作。
use think\Db;
# in Class
$ok = Db::table('ox_sliders') ->where('file_sha', $sha)->update(['delete_time' => ['exp','null'],]);
# now $ok is assigned to the number of rows that has been affected by this query.
# return 1, in my case
fuck it
- tp版本為5.0.3
- column 不能
類型轉換
->data()
不能類型轉換
->save()
,->update()
,->data()
不支持 null 賦值
More
- 如果你是新增數據,直接把 field 設置為
default NULL
alert table table_name modify `delete_time` timestamp default null;