2015-06-23 2 views
1

Я взял на себя проект, написанный в Laravel 4. Существуют две системы (dev и production), которые в основном должны делать то же самое.Как отлаживать исключение вставки в laravel 4/cartalyst sentry

Когда я пытаюсь зарегистрировать пользователя (в качестве пакета используется cartalyst/sentry), он работает на производстве. В среде dev она не работает, так как есть несколько столбцов, которые определены как не равные нулю, и в коде нет инструкции для ее установки. Поэтому я понимаю, почему это не удается, но я не понимаю, почему он работает на другой машине и какие настройки я могу сделать на dev, чтобы заставить его работать. Без изменения db-столбцов (я хочу понять систему перед внесением таких изменений).

Исключение:

SQLSTATE[HY000]: General error: 1364 Field 'auto_token' doesn't have a default value 
(SQL: insert into `users` (`first_name`, `last_name`, `display_name`, `email`, 
`password`, `updated_at`, `created_at`) values (?, ?, ?, ?, ?, ?, ?)) (Bindings: array ... 

Код для РЕГИСТРИРУЙСЯ нового пользователя:

 $user = Sentry::register(array(
      'first_name' => Input::get('first_name'), 
      'last_name' => Input::get('last_name'), 
      'display_name'=> Input::get('display_name'), 
      'email'  => Input::get('email'), 
      'password' => Input::get('password'), 
     )); 

DB-схемы:

id (unsigned int, not null) 
first_name (varchar, not null) 
last_name (varchar, not null) 
display_name (varchar, not null) 
email (varchar, not null) 
password (varchar, not null) 
auto_token (varchar, not null) 
... more columns like auto_token 

Prod: MySQ L 5.5.42 - PHP 5.4.30 - работает на Linux

Dev: MySQL 5.6.21 - PHP 5.4.30 - работает на Windows,

Я знаю, что запрос не должен успешно работать в первую очередь, схема базы данных в целом ошибочна. Я хотел бы узнать, что вызывает это и как решить эту проблему.

Где я застрял, почему на одной системе это работает, а с другой нет. Кто-нибудь знает направление?

ответ

1

Похоже, ваша проблема в MySQL. Чтобы избежать этих ошибок, вы должны отключить MySQL Strict Mode.

Найти my.cnf или my.ini файл конфигурации и удалить STRICT_TRANS_TABLES из sql-mode значение.

E.g. перед тем редактирования:
sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

После редактирования:
sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

Вы должны перезапустить MySQL после сохранения файла конфигурации и все будет, вероятно, работать, как ожидалось.

С другой стороны, отключение «строгого режима» - это плохая практика, и лучше изменить свои миграции и добавить nullable или default в надлежащих местах.

Удачи вам!

+0

Замечательный, 1 ответ - ударил его точно. Спасибо, иногда мне интересно, как на планете кто-то может знать эти вещи ... – hogan

+0

Добро пожаловать. Ничего волшебного, потому что у меня была такая же проблема много раз: :) Теперь вы также можете помочь другим людям, когда у них есть аналогичная проблема. –

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