适用于不同环境的Laravel播种机

时间:2014-07-16 01:18:29

标签: laravel laravel-4 seed

我在播种机文件夹中创建了两个文件夹:

/seeds
    /local
    /production
    DatabaseSeeder.php

然后,在DatabaseSeeder.php

中定义以下内容

class DatabaseSeeder扩展了Seeder {

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

    // Load production seeder
    if (App::Environment() === 'production')
    {
        $this->call('production/UsersTableSeeder');
    }

    // Load local seeder
    if (App::Environment() === 'local')
    {
        $this->call('local/UsersTableSeeder');
    }
}

}

现在我知道我不能call('local/UsersTablderSeeder'),这是我的问题。我怎样才能call()各自文件夹中的播种机文件?

修改

要清楚,当我运行上面显示的代码时,我收到以下错误

[ReflectionException]                            
Class local/UsersTableSeeder does not exist

3 个答案:

答案 0 :(得分:5)

我只是快速尝试了这个并让它正常工作,所以我会告诉你我是如何设置的,希望这会有所帮助。

应用程序/数据库/种子/本地/ UsersTableSeeder.php

<?php namespace Seeds\Local;

use Illuminate\Database\Seeder as Seeder;

Class UsersTableSeeder extends Seeder {
    public function run () {
        dd('local');
    }
}

应用程序/数据库/种子/生产/ UsersTableSeeder.php

<?php namespace Seeds\Production;

use Illuminate\Database\Seeder as Seeder;

Class UsersTableSeeder extends Seeder {
    public function run () {
        dd('production');
    }
}

应用程序/数据库/种子/ DatabaseSeeder.php

<?php

class DatabaseSeeder extends Seeder {

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

        // Load production seeder
        if (App::Environment() === 'production')
        {
            $this->call('Seeds\Production\UsersTableSeeder');
        }

        // Load local seeder
        if (App::Environment() === 'local')
        {
            $this->call('Seeds\Local\UsersTableSeeder');
        }
    }

}

不要忘记运行composer dump-autoload。 希望有所帮助。

答案 1 :(得分:2)

问题是'/'。您应该使用'\'代替。

答案 2 :(得分:0)

Laravel 5.7或更高版本

if ( App::environment('local') ) {
        $this->call(Seeder::class);
}
if ( App::environment('production') ) {
            $this->call(Seeder::class);
}
if ( App::environment('testing') ) {
            $this->call(Seeder::class);
}