【问题标题】:Update using Laravel: created_at is updated when updating record使用 Laravel 更新:更新记录时更新 created_at
【发布时间】:2019-05-28 17:21:43
【问题描述】:

更新功能在以下代码中运行良好。我将status 字段更新为0。该字段的默认值为1。它工作正常,但created_at 字段也会在使用此函数时更新。更新的应该是updated_at 字段,而不是created_at

在我的notification_records 表中,我有created_atupdated_at 字段。

created_at 数据类型为timestamp(),如果有新创建的通知记录,则使用此字段,updated_at 字段仅用于修改

public function notification(Request $request){
$company_id = auth()->user()->company_id;
DB::connection('mysql')->select("UPDATE notification_records SET status = '0' WHERE company_id = '".$company_id."' AND id = '".$request->ind."'");
}

我想要做的是,每当使用该函数时,唯一会更新created_atupdated_at 之间字段值的字段是updated_at。有没有办法用上面的代码做到这一点?

【问题讨论】:

  • 如果您没有将 created_at 属性设置为更新时,如果有其他选项可通过查询构建器方法或 eloquent 方法也可以在您的表结构中使用,那么编写原始 sql 查询不是一个好习惯currenttimestamp 然后它不会更新它也可以在你点击你的函数时在你的 updated_at 字段中传递日期
  • 我删除了“on update CURRENT_TIMESTAMP”,它现在工作正常。我还添加了这些时间戳的默认值。实际上我使用的是不同的表连接,这就是为什么我更喜欢使用经典的 sql 查询而不是使用 eloquent 或 builder 方法
  • 您也可以使用查询构建器方法(表的不同连接),但没关系,我只是说这不是一个好习惯。这不是你必须做或不做的事
  • 感谢您的建议,已注明。一旦我得到一个新项目,我就会学习这些方法。因为我已经用这种编码开始了这个项目。

标签: php mysql laravel


【解决方案1】:

这是 laravel 5.2 中的一个问题 您可以通过删除和读取时间戳来缓解这种情况,如下所示: 而不是$table->timestamps();

$table->timestamp('created_at')->default('0000-00-00 00:00');
$table->timestamp('updated_at')->default('0000-00-00 00:00');

查看这里的问题:Laravel changes created_at on update

解决方案参考这里

https://github.com/spatie/laravel-medialibrary/issues/150

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2012-11-21
    • 2020-05-30
    • 1970-01-01
    • 2016-04-19
    • 2019-03-04
    相关资源
    最近更新 更多