【问题标题】:Laravel Seeder for Different Environments适用于不同环境的 Laravel 播种机
【发布时间】:2014-07-16 01:18:29
【问题描述】:

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

/seeds
    /local
    /production
    DatabaseSeeder.php

然后,在DatabaseSeeder.php内部定义如下

类 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

【问题讨论】:

  • 我不明白你的问题 - 你写的有什么问题?
  • 请看上面,找不到文件
  • 你试过命名空间每个UsersTableSeeder。这样你就可以call('local\UsersTableSeeder');。 call 方法是在寻找一个类,而不是一个文件。
  • 我将每个UsersTableSeeder 命名为namespace seeds\local,然后通过call('seeds\local\UsersTableSeeder') 调用它,这也不起作用。

标签: laravel laravel-4 seed


【解决方案1】:

我只是快速尝试了一下并让它工作了,所以我将向您展示我是如何设置它的,希望对您有所帮助。

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。 希望对您有所帮助。

【讨论】:

    【解决方案2】:

    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】:

      问题是'/'。你应该改用'\'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-07
        • 2016-05-10
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 2014-07-02
        相关资源
        最近更新 更多