Buscar..


Corriendo una sembradora

Puede agregar su nueva Sembradora a la clase DatabaseSeeder.

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }

Para ejecutar una sembradora de bases de datos, use el comando Artisan

php artisan db:seed

Esto ejecutará la clase DatabaseSeeder. También puede elegir usar la opción --class= para especificar manualmente qué sembradora ejecutar.

* Tenga en cuenta que es posible que tenga que ejecutar el dumpautoload del compositor si no se puede encontrar su clase Seeder. Esto suele suceder si crea manualmente una clase sembradora en lugar de usar el comando artisan.

Creando una semilla

Las semillas de la base de datos se almacenan en el directorio / database / seeds. Puedes crear una semilla usando un comando Artesano.

php artisan make:seed UserTableSeeder

Alternativamente, puede crear una nueva clase que amplíe Illuminate\Database\Seeder . La clase debe una función pública llamada run() .

Insertando datos usando una sembradora

Puede hacer referencia a modelos en una sembradora.

use DB;
use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        # Remove all existing entrie
        DB::table('users')->delete() ;
        User::create([
            'name' => 'Admin',
            'email' => '[email protected]',
            'password' => Hash::make('password')
        ]);

    }
}

Insertando datos con un Model Factory

Es posible que desee utilizar Fábricas de modelos dentro de sus semillas. Esto creará 3 nuevos usuarios.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        factory(User::class)->times(3)->create();    
    }
}

También puede definir campos específicos en su siembra como una contraseña, por ejemplo. Esto creará 3 usuarios con la misma contraseña.

factory(User::class)->times(3)->create(['password' => '123456']);    

Siembra con MySQL Dump

Siga el ejemplo anterior de crear una semilla. Este ejemplo utiliza un volcado de MySQL para generar una tabla en la base de datos del proyecto. La tabla debe ser creada antes de la siembra.

<?php

use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder
{

    /**
     * Run the database seeds.
     *
     * @return void
     */
     public function run()
     {
         $sql = file_get_contents(database_path() . '/seeds/users.sql');
    
         DB::statement($sql);
      }
}

Nuestro $ sql será el contenido de nuestro volcado users.sql. El volcado debe tener una instrucción INSERT INTO. Dependerá de usted dónde almacene sus vertederos. En el ejemplo anterior, se almacena en el directorio del proyecto \database\seeds . Utilizando la función helper de laravel database_path() y agregando el directorio y el nombre de archivo del volcado.

INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'),
(2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');

DB::statement($sql) ejecutará las inserciones una vez que se ejecuta la Sembradora. Como en los ejemplos anteriores, puede colocar el UserTableSeeder en la clase DatabaseSeeder proporcionada por laravel:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }
}

y ejecute desde CLI en el directorio de proyectos php artisan db:seed . O puede ejecutar la Sembradora para una sola clase usando php artisan db:seed --class=UsersTableSeeder

Usando faker y ModelFactories para generar semillas

1) VÍA SIMPLE BÁSICA

Las aplicaciones basadas en bases de datos a menudo necesitan datos pre-sembrados en el sistema para fines de prueba y demostración.

Para hacer tales datos, primero cree la clase sembradora

ProductTableSeeder

use Faker\Factory as Faker;
use App\Product;

class ProductTableSeeder extends DatabaseSeeder {

public function run()
{
    $faker = $this->getFaker();

    for ($i = 0; $i < 10; $i++)
    {
        $name =         $faker->word;
        $image =        $faker->imageUrl;
       
        Modelname::create([
            'name' => $name,
            'image' => $image,
        ]);
      }
    }
 }

Para llamar a una clase de ser capaz de ejecutar una sembradora, debe llamarla desde la clase DatabaseSeeder, simplemente al pasar el nombre de la sembradora que desea ejecutar:

utilizar Illuminate \ Database \ Seeder;

class DatabaseSeeder extends Seeder {

    protected $faker;

    public function getFaker() {
        if (empty($this->faker)) {
            $faker = Faker\Factory::create();
            $faker->addProvider(new Faker\Provider\Base($faker));
            $faker->addProvider(new Faker\Provider\Lorem($faker));
        }
        return $this->faker = $faker;
    }
    public function run() {
        $this->call(ProductTableSeeder::class);
    }
}

No se olvide de ejecutar $ composer dump-autoload después de crear la Sembradora, ya que el compositor no los carga automáticamente (a menos que haya creado la sembradora con el comando artesanal $ php artisan make:seeder Name )

Ahora está listo para sembrar ejecutando este comando php artisan db:seed

2) UTILIZANDO Fábricas de modelos

En primer lugar, debe definir un conjunto predeterminado de atributos para cada modelo en App/database/factories/ModelFactory.php

Tomando como ejemplo un modelo de usuario, este es el aspecto de ModelFactory

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

Ahora php artisan make:seeder UsersTableSeeder una tabla sembradora php artisan make:seeder UsersTableSeeder

Y agrega esto

public function run()
{
    factory(App\User::class, 100)->create()
}

A continuación, agregue esto al DatabaseSeeder

public function run()
{
    $this->call(UsersTableSeeder::class);
}

Esto sembrará la tabla con 100 registros.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow