在 Laravel 5.1 中添加带有迁移的列后,无法在我的数据库中修改“updated_at”

Posted

技术标签:

【中文标题】在 Laravel 5.1 中添加带有迁移的列后,无法在我的数据库中修改“updated_at”【英文标题】:Can't modify 'updated_at' in my database after adding a column with a migration in Laravel 5.1 【发布时间】:2019-04-18 14:03:34 【问题描述】:

我正在尝试在我的数据库表中添加一个新的整数“id”列,以映射具有 id 的每一行。为此,我在 Laravel 5.1 中使用了迁移。迁移的run()函数正好如下:

public function up()

    Schema::table('license_keys', function($table) 
        $table->integer('id_nuevo');
    );

我尝试修改的表设置了默认的“updated_at”和“created_at”时间戳

我执行了迁移并正确添加了列。我确保在模型的 $fillable 变量中添加新列。该过程的下一步是正确设置 id,因为该列是用全 0 创建的。为此,我使用了带有以下代码的 Seeder:

public function run()

    $i=1;
    $licenses = LicenseKey::getEveryLicenseKey();
    foreach ($licenses as $license)
        $license->id_nuevo = $i;
        //$license->timestamps = false;
        $license->save();
        $i++;
    


但问题从这里开始。当我尝试使用 save() 函数更新任何行的任何字段时,它会给我以下错误:

[Illuminate\Database\QueryException]                                                                                                                                                                     
 SQLSTATE[21S01]: Insert value list does not match column list: 1136       Column count doesn't match value count at row 1 (SQL: update `license_keys`   set `id_nuevo` = 1, `updated_at` = 2018-11-15 13:24:11   
 where `hash_key` = 0...0b)                                                                                                                                                     



  [PDOException]                                                                                                       
  SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

但如果我将时间戳设置为 false(代码中的注释行),则操作成功。即使我尝试手动更改 phpMyadmin 中“updated_at”列的值,它也会给我同样的错误。有人可以帮我解决这个问题吗?

表的结构是:

CREATE TABLE `license_keys` (
`hash_key` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`user_id` int(10) UNSIGNED NOT NULL,
`plan_id` int(10) UNSIGNED NOT NULL,
`id_nuevo` int(11) NOT NULL,
`max_credits` bigint(20) NOT NULL,
`max_models` int(11) NOT NULL,
`max_model_categories` int(11) NOT NULL,
`max_dictionaries` int(11) NOT NULL,
`max_dictionary_entries` int(11) NOT NULL,
`max_sentiment_models` int(11) NOT NULL,
`max_sentiment_entries` int(11) NOT NULL,
`current_credits` bigint(20) NOT NULL,
`current_requests` bigint(20) NOT NULL,
`last_operation` timestamp NULL DEFAULT NULL,
`total_credits` bigint(20) NOT NULL,
`total_requests` bigint(20) NOT NULL,
`msg_pay_status` varchar(510) COLLATE utf8_unicode_ci NOT NULL,
`start_date` timestamp NULL DEFAULT NULL,
`start_billing_date` timestamp NULL DEFAULT NULL,
`expiration_date` timestamp NULL DEFAULT NULL,
`update_operation` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我要执行的查询是:

update `license_keys` set `id_nuevo` = 1, `updated_at` = '2018-11-15 13:24:11' where `hash_key` = '0...0b'

谢谢。

【问题讨论】:

你能提供你执行的查询和表结构吗? 是的,当然!我用该信息编辑了帖子 【参考方案1】:

尝试不使用 update_at 的查询,它会自动写入

update `license_keys` set `id_nuevo` = 1 where `hash_key` = '0...0b'

【讨论】:

是的,它有效。但问题是,在迁移之前,函数 save() 运行良好,之后返回该错误。整个代码充满了对 save() 的调用,但它们无法正常工作。我可以更改查询。我必须让这个功能发挥作用。不过还是谢谢!

以上是关于在 Laravel 5.1 中添加带有迁移的列后,无法在我的数据库中修改“updated_at”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移:添加具有现有列默认值的列

急急急!!! oracle中怎样在特定的列后添加新的列

将迁移放在 Laravel 5.1 包中的啥位置?

在迁移 laravel 5.1 中设置自动增量字段从 1000 开始

如何在 Laravel 中更新 created_at 的列属性

在 IMPALA/HIVE 中添加带有 SELECT 的新列后,旧表数据变为 NULL