以编程方式而不是CLI运行Laravel 5播种机

geo*_*310 16 php laravel laravel-5

有没有办法从PHP内部而不是从命令行运行Laravel 5播种机.我正在使用的托管不允许我使用命令行.只是为了确认我想在我的应用代码中做相同的操作:

php artisan db:seed
Run Code Online (Sandbox Code Playgroud)

Bog*_*dan 21

您可以使用以下方法:

Artisan::call('db:seed');
Run Code Online (Sandbox Code Playgroud)

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

Artisan::output();
Run Code Online (Sandbox Code Playgroud)

  • Artisan :: call('command:name',array('argument'=>'foo',' - option'=>'bar')); 请参阅https://laravel.com/docs/4.2/commands#calling-other-commands (4认同)
  • 相关:对于特定的类,你如何称呼它?例如,如果您想调用“php artisan db:seed --class=User”的等效项?我看到您将一个数组传递给 `Artisan::call()` 函数,但是当我使用 `Artisan::call('db:seed', ['class'=>'Users') 时,我收到无效参数异常])` 说“‘类’参数不存在。” (2认同)
  • @Kirkland,如果您想运行特定的播种机类,请尝试 `Artisan::call('db:seed', ['--class' => 'YourSeederClass']);` (2认同)

elf*_*fif 13

如果需要,您也可以直接调用Seeder类.如果你手动创建了播种机,请确保你做了一个composer dump-autoload.

从那里代码非常简单:

$seeder = new YourSeederClass();
$seeder->run();
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以在运行时向播种机添加参数

例子

  $newSchool = School::create($data);

     $schoolMeals = new \MealSeeder();
     $schoolMeals->run($newSchool->id);
Run Code Online (Sandbox Code Playgroud)

//学校餐

 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(),
        ]);
    }
Run Code Online (Sandbox Code Playgroud)