在 MySQL 中更新记录时,Laravel 的 useCurrent() 不起作用
Posted
技术标签:
【中文标题】在 MySQL 中更新记录时,Laravel 的 useCurrent() 不起作用【英文标题】:Laravel's useCurrent() doesn't work when a record is updated in MySQL 【发布时间】:2021-01-01 08:40:23 【问题描述】:我最近向我的数据库添加了一个新迁移,它以最简单的形式执行类似这样的操作
If(Schema::hasTable('some_table'))
Schema::table('some_table', function (Blueprint $table)
$table->dateTime('last_updated')->nullable(false)->useCurrent()->change();
);
根据 SE 上的this answer,Laravel 应该会自动为我创建和更新 last_record 列,但我正在 mysql 5.7.31 中对此进行测试,这对我来说绝对不是这种情况。我使用的是 Laravel 7.5,我的 php 版本是 7.3.21。
同时,手动将CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
添加到我的数据库也失败了。所以,这似乎是我的 MySQL 数据库而不是 Laravel 本身的问题。所以,我有两个问题:
是否有可能以某种方式使用 Laravel/PHP 在插入或更新时未传递任何内容时始终向字段添加默认值?
编辑:@lagbox 询问我如何保存/更新数据库中的记录。方法如下
$record= TableModel::where('blah', $blah)
->first();
if($record)
$record->update([
'blah1' => $blah1,
'blah2' => $blah2
]);
【问题讨论】:
Eloquent 会自动处理created_at
和 updated_at
@lagbox 是的,但我的字段是last_updated
,而不是updated_at
。是否可以告诉 Eloquent 更改默认名称?
是的,如果您检查Illuminate\Database\Eloquent\Model
,您将看到const UPDATED_AT = 'updated_at';
,因此您可以根据需要在模型上定义它laravel.com/docs/7.x/eloquent#eloquent-model-conventions 模型约定-时间戳
@lagbox 谢谢。如果我遗漏了一些非常微不足道的东西,我很抱歉,但我在我的桌子模型中添加了const UPDATED_AT = 'last_updated';
,但它仍然无法正常工作。 :|
你是如何保存/更新这条记录的?
【参考方案1】:
您可以覆盖 Eloquent 将自动处理的模型上用于 created_at
和 updated_at
时间戳的字段:
const UPDATED_AT = 'last_updated';
您还可以通过将const
设置为null
来禁用特定时间戳:
const CREATED_AT = null;
Laravel 7.x Docs - Eloquent - Model Conventions - TimestampsUPDATED_AT
CREATED_AT
【讨论】:
以上是关于在 MySQL 中更新记录时,Laravel 的 useCurrent() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 更新记录 - 这是 2 个 MySQL 调用最有效的吗?
Laravel save() 正在更新错误的 mysql 记录