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: insert into backend_users ( user_name, password, salt, needs_new_password, full_name, email, )値 (? role_type, ? enabled, ?, ?, ?, ?, ?, ?, ?, ?)) (バインディング: 配列 ( 0 => 'emmanuel', 1 => '70b104a42c4ac5e79ca7c150bf872b383e0eedca', 2 => '5514512bffb33f4a', 3 => 0, 4 => 'Emmanuel Figuerola', 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', )), ))updated_atcreated_at

そのすべてを読みたくない場合は、単にEloquentが必要な列名を使用していることを意味し、MY列名ではなく、それぞれの名前と値を明確に指定した場合でも.

私は何をすべきか?可能であれば、「列の名前を変更してください」と言わないでください。これは、多くの列の名前を変更することを意味するためです (私は多くのテーブルを持っています)。その上、列名の特定の命名規則についてはどこにも読んでいませんでした。

4

2 に答える 2

3

BaseModelModels ディレクトリにを作成してEloquentクラスを拡張し、

public static $snakeAttributes = false; 

BaseModel

BaseModel今後、モデルの代わりに拡張する場合はEloquent、独自の命名規則で動作します。

于 2013-07-12T05:01:36.037 に答える
0

Laravel は、列名が snake_case 規則を使用することを前提としています。これはEloquent自体に組み込まれています。Laravel は実際には列とテーブルの名前を前もって知りません。

Eloquent を拡張し、動的にテーブル名と列名を作成するメソッドをオーバーライドすることが可能です。Laravel 4 はまだベータ版であるため、アップストリームの変更を反映して拡張バージョンを最新の状態に保つ必要があります。DB のスキーマを更新してから、この道を進んでいくほうがおそらく時間はかからないでしょう。

于 2013-02-27T15:23:44.363 に答える