Eloquent не запускает запрос для установления версий системы - PullRequest
0 голосов
/ 06 февраля 2019

Редактировать 2019-02-12 T 17:26 Z:

НЕ ИСПОЛЬЗУЙТЕ ЭТОТ КОД, ЭТО ГЛУПО..

Стремясь к полному безумию, я решил попробовать это, в основном, чтобы удовлетворить свое любопытство:

exec(
  'mysql -uuser -ppassword -e "USE database; CALL sys_vers(\'table_a\')"'
);

Угадай, что ...

ERROR 1067 (42000) at line 1: Invalid default value for 'valid_from'

Однако,сбрасывание самого запроса ALTER в вызов exec работает.Даже после всего этого, ВСТАВКА в теперь версионную таблицу выдает больше ошибок.

Invalid datetime format: 1978 
Incorrect default value 
'0000-00-00 00:00:00.000000' column 'valid_from'

Редактировать 2019-02-12 T 16:46 Z:

Я сузил проблему до PDO, вызвав запросы, используя

DB::getFacadeRoot()->getPDO()->exec(...)

После настройки хранимой процедуры на сервере, который выполняет оператор ALTER, я быпросто запустите

CALL sys_vers('table_a') из миграции.

Это также не с тем же сообщением об ошибке

SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'valid_from'


Edit 2019-02-12 T 16:04 Z:

С тех пор я пытался выполнять запросы также через DB::unprepared.Никаких кубиков.


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

DB::statement('SET @system_versioning_alter_history="keep";');

DB::statement(
      <<<SQL
ALTER TABLE c_$tableName 
  ADD COLUMN valid_from TIMESTAMP(6) GENERATED ALWAYS AS ROW START,
  ADD COLUMN valid_till TIMESTAMP(6) GENERATED ALWAYS AS ROW END,
  ADD PERIOD FOR SYSTEM_TIME(valid_from, valid_till),
  ADD SYSTEM VERSIONING;
SQL
);

DB::statement('SET @system_versioning_alter_history="error";');

Однако, запуск миграции через artisan просто выдает эту ошибку:

  SQLSTATE[42000]: Syntax error or access violation: 
1067 Invalid default value for 'valid_from' 
(SQL: ALTER TABLE c_test_versions                                                                                                        
    ADD COLUMN valid_from TIMESTAMP(6) GENERATED ALWAYS AS ROW START,                                                  
    ADD COLUMN valid_till TIMESTAMP(6) GENERATED ALWAYS AS ROW END,                                                    
    ADD PERIOD FOR SYSTEM_TIME(valid_from, valid_till),                                                                
    ADD SYSTEM VERSIONING;)  

Я ожидаюзапрос на работу, поскольку он выполняется при копировании из сообщения об ошибке и запуске в клиенте командной строки mysql.

...