以编程方式运行Laravel 5种子程序而不是从CLI运行

26

是否有一种方法可以在 PHP 中运行 Laravel 5 数据填充器而不是从命令行运行。我使用的托管服务不允许我使用命令行。只是想确认我想要在我的应用程序代码中执行相当于这个的操作:

php artisan db:seed
3个回答

34

如果需要,您还可以直接调用Seeder类。只需确保在手动创建填充程序时进行了composer dump-autoload。

从那里开始,代码非常简单:

$seeder = new YourSeederClass();
$seeder->run();

1
注意在使用Seeder::command()或Seeder:container()时要小心。如果没有在构造函数调用中进行初始化,它们就不会被初始化。我已经在我的填充器中使用Seeder::resolve($className)方法代替,以设置$container和$command实例,并调用另一个填充器的方法。 - alvaropgl
一行代码实现: (new MySeeder)->run(); - PhillipMcCubbin
在另一个 Seeder 中运行时,使用 $this->call(MySeeder::class) - alvaropgl

34
你可以使用以下方法:

您可以使用以下方法:

Artisan::call('db:seed');

要获取上一次运行命令的输出,您可以使用:

Artisan::output();

2
相关:如何为特定类调用此功能?例如,如果您想调用相当于 php artisan db:seed --class=User 的内容?我看到您将数组传递给 Artisan::call() 函数,但是当我使用 Artisan::call('db:seed', ['class'=>'Users']) 时,我会收到无效参数异常,指出“'class'”参数不存在。 - Kirkland
5
Artisan::call('command:name', array('argument' => 'foo', '--option' => 'bar'));请参见 https://laravel.com/docs/4.2/commands#calling-other-commands。 - Cameron
下面的答案是一个更好的选择。 - Thomas
2
@Kirkland,如果你想运行特定的seeder类,请尝试Artisan::call('db:seed',['--class' => 'YourSeederClass']); - Sven

8
您可以在运行时向种子添加参数。
例如:
  $newSchool = School::create($data);

     $schoolMeals = new \MealSeeder();
     $schoolMeals->run($newSchool->id);

//学校餐饮

 public function run($school = 1)
    {

        $time = Carbon::now();

        App\Meal::create([
            'school_id' => $school,
            'name' => 'Breakfast',
            'slug' => 'breakfast',
            'description' => 'Test Meal',
            'start_time' => $time->toTimeString(),
            'end_time' => $time->addMinutes(60)->toTimeString(),
        ]);
        App\Meal::create([
            'school_id' => $school,
            'name' => 'Lunch',
            'slug' => 'lunch',
            'description' => 'Test Meal',
            'start_time' => $time->toTimeString(),
            'end_time' => $time->addMinutes(60)->toTimeString(),
        ]);
        App\Meal::create([
            'school_id' => $school,
            'name' => 'Supper',
            'slug' => 'supper',
            'description' => 'Test Meal',
            'start_time' => $time->toTimeString(),
            'end_time' => $time->addMinutes(60)->toTimeString(),
        ]);
    }

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