Ejecute la sembradora Laravel 5 mediante programación en lugar de CLI

2 minutos de lectura

¿Hay alguna manera de ejecutar la sembradora Laravel 5 desde PHP en lugar de desde la línea de comandos? El hosting que estoy usando no me permite usar la línea de comandos. Solo para confirmar que quiero hacer el equivalente a esto pero en el código de mi aplicación:

php artisan db:seed

avatar de usuario
Bogdán

Puedes usar el siguiente método:

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

Para obtener el resultado del último comando de ejecución, puede usar:

Artisan::output();

  • Relacionado: ¿Cómo se llama esto para una clase específica? Por ejemplo, si desea llamar al equivalente de php artisan db:seed --class=User? Veo que le pasas un array al Artisan::call() función, pero obtengo una excepción de argumento no válido cuando uso Artisan::call('db:seed', ['class'=>'Users']) diciendo “El argumento ‘clase’ no existe”.

    – Kirkland

    12/08/2015 a las 18:55

  • Artisan::call(‘comando:nombre’, array(‘argumento’ => ‘foo’, ‘–option’ => ‘bar’)); Ver laravel.com/docs/4.2/commands#calling-other-commands

    – Cameron

    27 de junio de 2016 a las 4:13

  • La respuesta a continuación es una opción mucho mejor.

    – Tomás

    6 de noviembre de 2017 a las 13:20

  • @Kirkland, si desea ejecutar una clase de sembrador específica, intente Artisan::call('db:seed', ['--class' => 'YourSeederClass']);

    – Sven

    15 de enero de 2020 a las 9:34

También puede llamar directamente a la clase Seeder si es necesario. Solo asegúrese de haber realizado una carga automática de volcado del compositor si creó su sembradora manualmente.

A partir de ahí, el código es muy sencillo:

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

  • Precaución si usa Seeder::command() o Seeder:container(). No se ha iniciado en la llamada del constructor. En cambio, he usado desde mi sembradora para llamar a otra sembradora al método Seeder::resolve($className) ya que configura instancias de $container y $command

    – alvaropgl

    13 de noviembre de 2019 a las 9:44

  • Para hacerlo en 1 línea: (nuevo MySeeder)->run();

    – Phillip McCubbin

    28 de julio de 2021 a las 16:03

Puede agregar parámetros a la sembradora en ejecución

ejemplo

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

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

//comida escolar

 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(),
        ]);
    }

¿Ha sido útil esta solución?