【问题标题】:PHP/Laravel - Updating SQL integer column in row adds 1 to the valuePHP/Laravel - 更新行中的 SQL 整数列将值加 1
【发布时间】:2020-01-16 22:21:09
【问题描述】:

我有一个奇怪的问题,我正在尝试更新我的 SQL 数据库中的一个条目,当我增加列的值并保存它时它一直加 1。

例如,我+= 1对一个条目的现有值2,结果是3,但是保存时它在数据库中记录为4... 列结构为 int(20) 无符号。

PHP:

$quantity = 1;
$item = \App\item::find($item_id);
$item->items_sold += $quantity;
$item->save();

如果我dd($item->items_sold)结果是正确的,并且值改变了指定的量。但是,当我检查数据库时,该值增加了指定的数量,然后再次增加了 1...

任何帮助将不胜感激!谢谢你:)

【问题讨论】:

  • 你可能会运行这个 sn-p 两次吗?没有看到上下文,或者你如何执行它,这个问题仍然没有答案。
  • 它在一个运行一次的控制器中,我在保存后立即死亡和转储,还有一个额外的 exit() 以确保:)
  • 这里没有任何东西表明它应该增加两次。所以这是我们需要更多信息的东西,你需要进一步调试它。例如,如果您将之前和之后的值附加到数组中,然后在 save() 之后再次获取它,然后用这两个值和新对象(刚从数据库中)转储该数组,您会看到如果它增加一两次。还要记住,即使控制器执行一次,控制器也可能以某种方式被调用两次。
  • 我的猜测是,当您认为只运行一次脚本时,您会以某种方式运行脚本两次。请在这段代码附近添加一些日志记录,并检查它是否真的为您的每个 +2 增量运行一次(例如,在 $item->save 语句之前添加一个 error_log 调用并重新运行它。然后检查服务器日志/php- fpm 日志以获取线索)。

标签: php mysql laravel


【解决方案1】:

查询构建器还提供了方便的方法来增加或 递减给定列的值see

\App\item::find($item_id)->increment('items_sold',1);

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多