thinkPHP5.x 更新字段为 NULL
简介
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;
天和地是灰色的,砖和瓦也是灰色的。临街的墙几经风化,几经修补,刷过黑灰、白灰,涂过红漆,书写过不同内容的标语,又终于被覆盖;风雨再把覆盖层胡乱地揭下来,形成一片斑驳的杂色,融汇于灰色的笼罩之中。路旁的树木苍黑,瓦楞中芳草青青。
远处,炊烟缭绕。迷蒙的曙色中,矗立着...