increment 及 decrement 的踩坑经历

第一个参数是需要增加或删除的字段名,第二个参数是自增的数量

//increment('notice_count',3)
$User->increment('notice_count');

$User->decrement('notice_count');

踩坑

这样使用确实非常方便,但是第一次用的时候发现怎样都没有办法实现的自增,由于手贱无意的修改了下数据库的值

  • 然后再次请求接口的时候发现竟然能用了 ! 当时并没有太在意,结果第二次用到这个方法的时候又出现了不能使用的情况
    为了证实下自己的观点 重新执行了数据库迁移 讲字段默认设置为0 发现居然可以使用了

不得不说这个点真的很坑爹,不知道是因为自己粗心大意没仔细阅读手册 还是根本没写这个地方.分享出来给大家如果以后遇到类似的问题至少能少一个需要排查的地方!

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

increment 和 decrement 的实质是在 mysql 对某个字段值 +- 1 后赋值操作。 而 mysql 里面, null+1 的值依然为 null

可以在 msyql 里执行 select null+1 看返回的值是多少。

其实好多强类型语言(例如 C#)都是这样操作的, null 连接字符串依然是 null ,null 加减乘除任何值依然是 null。有点像高数里的正负无穷加减有穷数依然是正负无穷。

这个不能说是 mysql 的坑或者 laravel 的坑,应该是用 php 的思路去考虑导致的问题。

另外:计数类的字段,都会设置为默认值 0

4年前 评论

意思是你的原来的默认值是 null ?

4年前 评论
Jourdon

这个自增自减不能使用模型监听,,也是个坑。

4年前 评论

increment 和 decrement 的实质是在 mysql 对某个字段值 +- 1 后赋值操作。 而 mysql 里面, null+1 的值依然为 null

可以在 msyql 里执行 select null+1 看返回的值是多少。

其实好多强类型语言(例如 C#)都是这样操作的, null 连接字符串依然是 null ,null 加减乘除任何值依然是 null。有点像高数里的正负无穷加减有穷数依然是正负无穷。

这个不能说是 mysql 的坑或者 laravel 的坑,应该是用 php 的思路去考虑导致的问题。

另外:计数类的字段,都会设置为默认值 0

4年前 评论

@Jourdon 确实需要手动触发事件,有点麻烦。

event('eloquent.updating: App\User', $user);
4年前 评论
ibucoin

所以这类int数值我一般都是default(0)

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!