Невозможно изменить 'updated_at' в моей базе данных после добавления столбца с миграцией в Laravel 5.1 - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь добавить новый целочисленный столбец «id» в таблицу моей базы данных, чтобы сопоставить каждую строку с идентификатором. Для этого я использую миграцию в Laravel 5.1. Функция run () миграции в точности выглядит следующим образом:

public function up()
{
    Schema::table('license_keys', function($table) {
        $table->integer('id_nuevo');
    });
}

Таблица, которую я пытаюсь изменить, установлена ​​с временными метками по умолчанию «updated_at» и «create_at».

Я выполняю миграцию, и столбец добавляется правильно. Я обязательно добавил новый столбец в переменную $ fillable в моей модели. Следующим шагом в этом процессе является правильная установка идентификаторов, поскольку этот столбец создается со всеми нулями. Для этого я использую сеялку со следующим кодом:

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 (закомментированная строка в коде), операция завершится успешно. Даже если я пытаюсь вручную изменить значение столбца updated_at в phpMyadmin, это выдает мне ту же ошибку. Кто-нибудь может мне помочь с этой проблемой?

Структура таблицы:

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 Ответ

0 голосов
/ 15 ноября 2018

Попробуйте свой запрос без update_at, он будет написан автоматически

update `license_keys` set `id_nuevo` = 1 where `hash_key` = '0...0b'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...