私はLaravelの初心者です。データベースをシードしたいと思っています。seedコマンドを実行すると例外が発生します。
[Illuminate\Database\Eloquent\MassAssignmentException]
username
db:seed [--class[="..."]] [--database[="..."]]
何が間違っているのでしょうか。私が使っているコマンドは
php artisan db:seed --class="UsersTableSeeder"
私のシードクラスは以下の通りです。
class UsersTableSeeder extends Seeder {
public function run()
{
User::truncate();
User::create([
'username' => 'PaulSheer',
'email' => '[email protected]',
'password' => '45678'
]);
User::create([
'username' => 'Stevo',
'email' => '[email protected]',
'password' => '45678'
]);
}
}
Laravel docのこのセクションを読んでください : http://laravel.com/docs/eloquent#mass-assignment
Laravelはデフォルトで、大量割り当てのセキュリティ問題に対する保護機能を備えています。そのため、どのフィールドが大量に割り当てられるか、手動で定義しなければなりません。
class User extends Model
{
protected $fillable = ['username', 'email', 'password'];
}
警告 : password
や role
のような重要なフィールドの一括割り当てを許可する場合は注意が必要です。望んでいないときにユーザーがこのフィールドの値を更新できてしまうため、セキュリティ上の問題が発生する可能性があります。
以下のようにモデルを拡張すると、MassAssignmentExceptionが発生しました。
class Upload extends Eloquent {
}
次のような配列を挿入しようとしました。
Upload::create($array);//$array was data to insert.
としてアップロードモデルを作成したところ、問題が解決しました。
class Upload extends Eloquent {
protected $guarded = array(); // Important
}
参考 [https://github.com/aidkit/aidkit/issues/2#issuecomment-21055670][1]
[1]: https://github.com/aidkit/aidkit/issues/2#issuecomment-21055670