2016-06-14 6 views
1

Я недавно перешел с MySQL на PostgreSQL. я заметил, что я постоянно получаю эту ошибкуInvalidArgumentException в строке Carbon.php 425: данные трейдинга

InvalidArgumentException in Carbon.php line 425: 
Trailing data 

Затем я сделал глобальный поиск Carbon:: в моем приложении. Я нашел 47 матчей в 15 файлах.

Как исправить эти ошибки, не изменяя все эти файлы?


I дд() мой объект это то, что я получил

Capture {#412 ▼ 
    #table: "captures" 
    #connection: null 
    #primaryKey: "id" 
    #perPage: 15 
    +incrementing: true 
    +timestamps: true 
    #attributes: array:6 [▼ 
    "id" => 65 
    "type" => "cpe" 
    "cpe_mac" => "000D6721A5EE" 
    "device_mac" => null 
    "created_at" => "2016-05-03 11:20:10-04" 
    "updated_at" => "2016-05-03 11:20:10-04" 
    ] 

    .... 
+0

С какой версией MySQL вы мигрировали? Временные поля имеют разные значения хранения в разных системах хранения MySQL и WILL отличаются PostgreSQL. ИСТОЧНИК: мне пришлось перейти от MySQL 5.7 к MySQL 5.5 из-за обстоятельств и испытали то же самое. Оказывается, что отметки времени 5.7 также сохраняли миллисекунды. –

ответ

3

Это именно то, что вы думаете. Проблема здесь в том, что столбец timestamp в PostgreSQL фактически ожидает другого формата временной метки, который включает в себя miliseconds в конце. 'Y-m-d H:i:s.u' в отличие от формата по умолчанию Carbon и столбца timestamp MySQL, который равен 'Y-m-d H:i:s. Для того, чтобы исправить это, скажите PostgreSQL, что вы не хотите, чтобы сохранить часовой пояс, как часть ваших строк в вашем timestamp колонке:

ALTER TABLE {tablename} ALTER updated_at SET DATA TYPE timestamp(0) without time zone; 

Вы должны сделать это для всех таблиц и все столбцы, которые имеют отметка времени.

+0

Как я могу изменить всю свою базу данных? У меня около 10 таблиц. Пожалуйста, порекомендуйте. – ihue

+0

@ihue Просто делайте это один за другим. Сохраните их как 'migrations' и запустите' rawSQL' внутри них, таким образом вы все равно можете просто выполнить «php artisan migrate» в любых будущих средах. – Ohgodwhy

+0

Что я должен положить в свой down()? 'DB :: statement ('ALTER TABLE cloud-ценных бумаг ALTER updated_at SET DATA TYPE timestamp (0) с часовым поясом;');'? – ihue

 Смежные вопросы

  • Нет связанных вопросов^_^