2015-06-23 42 views
1

我接管了一個在Laravel 4中編寫的項目。有兩個系統(dev和production)基本上應該這樣做。如何在laravel 4/cartalyst sentry中調試插入異常

當我嘗試註冊一個用戶(所使用的包裝是cartalyst/sentry)時,它對生產有效。在開發環境中,它失敗了,因爲有些列定義爲非空,並且代碼中沒有設置它的語句。所以我明白爲什麼它會失敗,我不明白爲什麼它在另一臺機器上工作,以及我可以在dev上做些什麼調整來使它工作。不改變數據庫列(我想在進行這種更改之前瞭解系統)。

例外:

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 ... 

代碼以reactor進行註冊一個新用戶:

 $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大號42年5月5日 - PHP 5.4.30 - 在Linux上

開發運行:MySQL的5.6.21 - PHP 5.4.30 - 在Windows

我知道,查詢不應該擺在首位成功運行運行,數據庫模式通常是有缺陷的。我想知道是什麼原因造成的,以及如何解決這個問題。

我被困住的地方是爲什麼在一個系統上工作,而另一個不是。任何人都知道方向?

回答

1

看起來像你的問題是在MySQL配置。爲了避免這些錯誤,您必須禁用MySQL嚴格模式。

找到my.cnfmy.ini配置文件並從sql-mode中刪除STRICT_TRANS_TABLES值。

E.g.
sql-mode=」STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION」

編輯後:編輯之前
sql-mode=」NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION」

你必須保存配置文件後重新啓動mysql和預期都將可能工作。

另一方面,禁用「嚴格模式」是一種不好的做法,編輯遷移並在適當位置添加nullabledefault是一個好主意。

祝你好運!

+0

太棒了,1個答案 - 正好碰到它。謝謝,有時我想知道這個星球上有人可以知道這些東西... – hogan

+0

不客氣。沒有什麼不可思議的,因爲我曾經多次遇到同樣的問題:)現在,當他們遇到類似問題時,您也可以幫助其他人。 –