データベースのテーブルに初期値を自動登録する
Laravelの機能を使ってデータベースのテーブルに初期値を自動的に登録する。
artisanのオプションであるdb:seedを使うとテーブルに初期値を登録できる。まず「app\database\seeds」に「UserSeeder.php」というSeederを作る。中身は以下の通り。
<?php class UserSeeder extends Seeder { public function run() { $users = array( array('name' => 'Arnold', 'description' => 'Schwarzenegger'), array('name' => 'Sylvester', 'description' => 'Stallone'), ); DB::table('users')->insert($users); } }
これだけでは、まだデータベースに登録できない。「app\database\seeds」にある「DatabaseSeeder.php」にSeederを登録する。そうするとartisan実行時に「UserSeeder.php」を実行してくれる。
<?php class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { Eloquent::unguard(); $this->call('UserSeeder'); } }
以上で、準備が完了した。artisanで「db:seed」オプションをつけると、Seederの内容が実行される。
# php artisan db:seed Database seeded!
これで終わり。以下は少しだけ作り込んだSeeder。テキストから読み込んだデータを自作テーブル「titles」に登録したかった。
<?php class DareiSeeder extends Seeder { public function run() { $titles = self::_load(); DB::table('titles')->insert($titles); } private function _load() { $seeds = explode("\n", file_get_contents('app\database\seeds\seed.txt')); foreach ($seeds as $seed) { $title = explode("\t", $seed); $titles[] = array( 'name' => $title[0], 'year' => $title[1], 'language' => $title[2], 'country' => $title[3], 'description' => $title[4], ); } return $titles; } }