Sql laravel是在反向创建和更新的吗?

Sql laravel是在反向创建和更新的吗?,sql,laravel,laravel-5,eloquent,laravel-5.2,Sql,Laravel,Laravel 5,Eloquent,Laravel 5.2,Laravel框架版本5.2.5 当我更新一条记录时,update_at没有更改,而是创建的_at更改为当前时间戳 这是正确的吗 MariaDB [moon]> show columns from users; +----------------+------------------+------+-----+---------------------+-----------------------------+ | Field | Type | Nul

Laravel框架版本5.2.5

当我更新一条记录时,update_at没有更改,而是创建的_at更改为当前时间戳

这是正确的吗

MariaDB [moon]> show columns from users; +----------------+------------------+------+-----+---------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +----------------+------------------+------+-----+---------------------+-----------------------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | email | varchar(255) | NO | UNI | NULL | | | password | varchar(60) | NO | | NULL | | | remember_token | varchar(100) | YES | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | updated_at | timestamp | NO | | 0000-00-00 00:00:00 | | +----------------+------------------+------+-----+---------------------+-----------------------------+ MariaDB[moon]>显示来自用户的列; +----------------+------------------+------+-----+---------------------+-----------------------------+ |字段|类型|空|键|默认|额外| +----------------+------------------+------+-----+---------------------+-----------------------------+ |id | int(10)无符号| NO | PRI | NULL |自动增量| |名称| varchar(255)|否| |空|| |电子邮件| varchar(255)| NO | UNI | NULL || |密码| varchar(60)| NO | | NULL || |记住|标记| varchar(100)|是| |空|| |在更新当前时间戳时在|时间戳|否|当前时间戳|处创建| |更新于|时间戳|编号| 0000-00-00 00:00:00 || +----------------+------------------+------+-----+---------------------+-----------------------------+
查看您的数据库结构,问题是在
列中为
创建的
更新当前时间戳时出现
。显然不应该是这样。从迁移的角度来看,这个迁移不太可能自动设置,所以它可能是在MySQL中手动设置的,所以您应该在更新当前时间戳时删除
,以便在
列中创建


当您使用Eloquent
updated_更新模型时,在
列中的更新应该没有问题(也在当前数据库模式中)-如果不是,您可能不会使用Eloquent,因此它不会自动更新。如果您不确定,请显示您的代码如何更新此记录

最近很多人都遇到过此问题,您可以在此处阅读Github上的讨论:

MySQL 5.7不再允许使用0000-00-00作为有效的时间戳 严格模式已打开(默认情况下为)。所以要么使用
->NullableTimestamp()
->timestamp()->useCurrent()

您可以通过更改以下内容来解决此问题:

$table->timestamps();
要选择其中一个选项,请执行以下操作:

// Option 1:
$table->nullableTimestamps();

// Option 2:
$table->timestamp('updated_at')->useCurrent();
$table->timestamp('created_at')->useCurrent();
此外,在此MySQL页面上:

或者,如果禁用了时间戳的
explicit\u defaults\u(默认值),请执行以下操作之一:

使用指定常量默认值的DEFAULT子句定义列

指定NULL属性。这还导致列允许空值,这意味着您不能通过将列设置为空来分配当前时间戳。赋值NULL将列设置为NULL


不管是哪种情况,上述解决方案都应该能解决您的问题。

大家好,我叫阿拉什·拉盖伊,来自伊朗 我可以解决这个问题 请这样做: vendor/laravel/framework/srs/illumb/database/schema/blueprint.php 电话:792

请照我写的那样做。
并修复了此问题。

这听起来很奇怪。请发布您的模型和导致反向更改的代码。显然这是不正确的(与问题中的重复相同)-您不应该在更新当前时间戳时使用
,因为
处创建了
column@MarcinNabia谢谢你。似乎是因为mariadb的版本导致了故障?是的,你是对的。这似乎是因为mysql的默认行为。我正试图给出一个默认值来避免这种情况。谢谢。我已经编辑了蓝图并修复了这个:)谢谢。似乎拉威尔现在通过追加'->nullable()'解决了这个问题:
// Option 1:
$table->nullableTimestamps();

// Option 2:
$table->timestamp('updated_at')->useCurrent();
$table->timestamp('created_at')->useCurrent();
 public function timestamps()
{
    $this->timestamp('updated_at');

    $this->timestamp('created_at')->useCurrent();

}