Laravel不同环境下的数据填充器

7

我在我的数据填充器文件夹中创建了两个文件夹:

/seeds
    /local
    /production
    DatabaseSeeder.php

然后,在DatabaseSeeder.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('production/UsersTableSeeder');
    }

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

现在我知道我不能调用call('local/UsersTablderSeeder'),这就是我的问题。如何从其各自的文件夹中调用seeder文件?

编辑

明确一下,当我按照上面显示的代码运行时,我会得到以下错误

[ReflectionException]                            
Class local/UsersTableSeeder does not exist

我不理解你的问题 - 你所写的有什么问题吗? - Laurence
请参见上文,文件未找到。 - Kousha
你尝试过为每个“UsersTableSeeder”命名空间吗?这样你就可以使用call('local\UsersTableSeeder');。调用方法正在寻找一个类,而不是一个文件。 - Jeemusu
我将每个UsersTableSeeder命名空间化为namespace seeds\local,然后通过call('seeds\local\UsersTableSeeder')进行调用,但仍然无法正常工作。 - Kousha
3个回答

14

我刚刚快速尝试了一下并使其工作,所以我将展示给你如何设置它,希望可以帮到你。

app/database/seeds/local/UsersTableSeeder.php

<?php namespace Seeds\Local;

use Illuminate\Database\Seeder as Seeder;

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

app/database/seeds/production/UsersTableSeeder.php

<?php namespace Seeds\Production;

use Illuminate\Database\Seeder as Seeder;

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

app/database/seeds/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。


6

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);
}

3
问题在于'/',您应该使用'\'代替。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接