【发布时间】:2015-09-08 14:32:46
【问题描述】:
我接手了一个用 Laravel 4 编写的项目。有两个系统(开发和生产)基本上应该做同样的事情。
当我尝试注册用户时(使用的软件包是 cartalyst/sentry),它可以在生产环境中使用。在开发环境中,它失败了,因为有些列定义为非空,并且代码中没有设置它的语句。所以我理解它为什么会失败,我不明白为什么它可以在另一台机器上工作,以及我可以对 dev 进行什么样的调整来让它工作。无需更改 db-columns(我想在进行此类更改之前了解系统)。
例外:
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'),
));
数据库架构:
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
产品:MySQL 5.5.42 - PHP 5.4.30 - 在 Linux 上运行
开发:MySQL 5.6.21 - PHP 5.4.30 - 在 Windows 上运行
我知道查询一开始就不应该成功运行,数据库模式通常是有缺陷的。我想了解导致此问题的原因以及如何解决此问题。
我被卡住的地方是为什么在一个系统上它可以工作,而在另一个系统上却不行。有人知道方向吗?
【问题讨论】:
标签: php mysql exception laravel-4 cartalyst-sentry