increment 及 decrement 的踩坑经历
第一个参数是需要增加或删除的字段名,第二个参数是自增的数量
//increment('notice_count',3)
$User->increment('notice_count');
$User->decrement('notice_count');
踩坑
这样使用确实非常方便,但是第一次用的时候发现怎样都没有办法实现的自增,由于手贱无意的修改了下数据库的值
- 然后再次请求接口的时候发现竟然能用了 ! 当时并没有太在意,结果第二次用到这个方法的时候又出现了不能使用的情况
为了证实下自己的观点 重新执行了数据库迁移 讲字段默认设置为0 发现居然可以使用了
不得不说这个点真的很坑爹,不知道是因为自己粗心大意没仔细阅读手册 还是根本没写这个地方.分享出来给大家如果以后遇到类似的问题至少能少一个需要排查的地方!
关于 LearnKu
高认可度评论:
increment 和 decrement 的实质是在 mysql 对某个字段值 +- 1 后赋值操作。 而 mysql 里面,
null+1的值依然为null可以在 msyql 里执行
select null+1看返回的值是多少。其实好多强类型语言(例如 C#)都是这样操作的, null 连接字符串依然是 null ,null 加减乘除任何值依然是 null。有点像高数里的正负无穷加减有穷数依然是正负无穷。
这个不能说是 mysql 的坑或者 laravel 的坑,应该是用 php 的思路去考虑导致的问题。
另外:计数类的字段,都会设置为默认值 0
意思是你的原来的默认值是
null?这个自增自减不能使用模型监听,,也是个坑。
increment 和 decrement 的实质是在 mysql 对某个字段值 +- 1 后赋值操作。 而 mysql 里面,
null+1的值依然为null可以在 msyql 里执行
select null+1看返回的值是多少。其实好多强类型语言(例如 C#)都是这样操作的, null 连接字符串依然是 null ,null 加减乘除任何值依然是 null。有点像高数里的正负无穷加减有穷数依然是正负无穷。
这个不能说是 mysql 的坑或者 laravel 的坑,应该是用 php 的思路去考虑导致的问题。
另外:计数类的字段,都会设置为默认值 0
@Jourdon 确实需要手动触发事件,有点麻烦。
所以这类int数值我一般都是default(0)