Cloud and IT Design Project




Laravel 5 Seedで見る名前空間追加の例

Category : Laravel5 · by 2月 9th, 2015

この記事はLaravel 5 リリース後のLaravel Framework version 5.0を元に記載しています。

Laravel 5 Seedは、Larabelに先代から存在している、簡単に初期データとして追加できる機能です。

Larabel 4 (L4)との違いはほとんど無いです。ただし、注意点として名前空間を指定する必要があります。

名前空間とはなんぞやという方は別サイトでお調べください。なんだ、ややこしいL5から作業が増えたと思いますが、この名前空間のおかげで、自由な定義や配置ができるようになったそうなので、まあ、仕方ないですね。将来わかったら役に立つ、そういうものだと思いましょう。(かくいう私も勉強中です。。)

今回は、前回準備した、usersテーブルにseedを使って、初期データを登録してみましょう。

DatabaseSeeder.phpを修正

/database/seeds/DatabaseSeeder.php
L4と同じく、デフォルトの記述に追加したいクラス名を追加します。

ここでは例として、[UserTableSeeder]を追加

use Illuminate\Database\Seeder;//このへんもL5から追加されています
use Illuminate\Database\Eloquent\Model;//このへんもL5から追加されています

class DatabaseSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run() {
        Model::unguard();

        $this->call('UserTableSeeder');//クラス名
    }

}

初期データとして追加する実態のクラスを作成

/database/seeds/UserTableSeeder.phpを追加

追加内容はL4とあまり変わりませんが、

重要な点として、名前空間(ここでは、ユーザーテーブルを例にしているのでユーザーテーブルモデル、(/app/user.php)で指定している名前空間を useで追加してください。

(私は、これを忘れて はまりました。。)

<?php

use Illuminate\Database\Seeder;//これを追加しないとエラーになります!
use App\User;//これを追加しないとエラーになります!Appの名前空間を変えている場合は適宜変更を忘れずに!

class UserTableSeeder extends Seeder {

    public function run() {
        DB::table('users')->delete();

        User::create(array(
            'email' => 'foo@bar.com',
            'name' => 'admin',
            'password' => Hash::make( 'password' ) 
        ));
    }

}

あとの初期データの追加は、今まで通りartisan先生におまかせ

php artisan db:seed

以上で追加完了。追加したIDとパスワードでログインできれば成功です。

 

エラーが出る場合

use などの名前空間もちゃんと通っているのにクラスが見つからないエラーが出る時があります。

artisan make:コマンド で作った場合はオートローダー処理されますが、手作りでファイルを作るとたいていこれに見舞われます。

exception 'ReflectionException' with message 'Class クラス名TableSeeder does not exist' in /パス/Illuminate/Container/Container.php:776

などと行ってくる場合は、オートローラーの再構築が必要です。

composer dump-autoload

 

SHARE :