0

假设我有以下 MySQL 表:

CREATE TABLE backend_users(
id INT NOT NULL AUTO_INCREMENT,
userName VARCHAR(30) UNIQUE NOT NULL,
password VARCHAR(40) NOT NULL,
salt VARCHAR(16) NOT NULL,
needsNewPassword TINYINT(1) UNSIGNED NOT NULL,
forgotPasswordKey VARCHAR(8) NULL,
fullName VARCHAR(50) NOT NULL,
email VARCHAR(255) NOT NULL,
roleType INT NOT NULL,
enabled TINYINT(1) UNSIGNED NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
PRIMARY KEY (id)
) CHARACTER SET utf8 COLLATE utf8_general_ci;

如何使用 Eloquent 模型使用上面的列名将新行记录到表中?如果我按照文档中的说明尝试:

$user = User::create(
array(
'userName' => 'emmanuel',
'password' => $encryptedPassword,
'salt' => $salt,
'needsNewPassword' => 0,
'fullName' => 'Emmanuel Figuerola',
'email' => 'somemail@gmail.com',
'roleType' => 0,
'enabled' => 1
)
);

我收到以下错误:

例外:SQLSTATE [42S22]:未找到列:1054 '字段列表'中的未知列 'user_name'(SQL:插入backend_users ( user_name, password, salt, needs_new_password, full_name, email, role_type, enabled, updated_at, created_at) 值 (?, ?, ?, ?, ?, ?,?,?,?,? 5 => 'somemail@gmail.com', 6 => 0, 7 => 1, 8 => DateTime::__set_state(array('date' => '2013-02-26 00:20:03', ' timezone_type' => 3, 'timezone' => 'UTC', )), 9 => DateTime::__set_state(array( 'date' => '2013-02-26 00:20:03', 'timezone_type' => 3, 'timezone' => 'UTC', )), ))

如果您不想阅读所有这些内容,这仅意味着 Eloquent 正在使用它想要的任何列名,而不是我的列名,即使我明确指定了每个列的名称和值。

我该怎么办?如果可能,请不要说“重命名列”,因为这意味着重命名很多列(我有很多表)。此外,我没有阅读任何关于列名的特定命名约定的信息。

4

2 回答 2

3

BaseModel您可以在 Models 目录中创建一个并扩展Eloquent该类,然后将

public static $snakeAttributes = false; 

BaseModel.

从现在开始,如果你扩展BaseModel而不是Eloquent你的模型将使用你自己的命名约定。

于 2013-07-12T05:01:36.037 回答
0

Laravel 假设列名使用的是 snake_case 约定。这是 Eloquent 本身内置的。Laravel 实际上并不提前知道你的列名和表名。

可以扩展 Eloquent 并覆盖动态创建表和列名的任何方法。由于 Laravel 4 仍处于测试阶段,你需要保持你的扩展版本与任何上游更改保持同步。更新数据库架构的时间可能会更少,然后沿着这条路冒险。

于 2013-02-27T15:23:44.363 回答