ふたりはララベル (Laravel PHP Framework)

PHPフレームワークのLaravelの体験記を書いていきます。こんなタイトルのブログですが萌え系アニメは一秒たりとも観たことがありません。

データベースのテーブルに初期値を自動登録する

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;

	}

}