php artisan make:model Department -mfs
Mostrando entradas con la etiqueta Seeders. Mostrar todas las entradas
Mostrando entradas con la etiqueta Seeders. Mostrar todas las entradas
Ejemplo básico de Factory y Seeders
Crear el módelo y que cree tb las migracions y las factory:
En la migration creada añadir:
En database\factories\PostFactory.php:
En database\seeders\DatabaseSeeder.php:
En app\Models\Post.php:
Y ya simplemente ejecutar el migrate pero q además ejecute los seeders (con sus factorys):
php artisan make:model Post -mf
En la migration creada añadir:
$table->string('title');
$table->string('content');
En database\factories\PostFactory.php:
return [
'title' => $this->faker->sentence(),
'content' => $this->faker->text()
];
En database\seeders\DatabaseSeeder.php:
\App\Models\Post::factory(100)->create();
En app\Models\Post.php:
// para permitir la inserción masiva
protected $fillable = ['title', 'content'];
Y ya simplemente ejecutar el migrate pero q además ejecute los seeders (con sus factorys):
php artisan migrate:fresh --seed
Factorys desde DatabaseSeeder.php
Cuando se crea un factory no es necesario tener que crear un seeder específico para llamarlo, se puede llamar directamente desde database\seeders\DatabaseSeeder.php:
use App\Models\Post;
...
Post::factory(20)->create();
php artisan migrate:fresh --seed
Crear las tablas que necesita un blog con sus migraciones, sus seeders y sus factorys
https://www.youtube.com/watch?v=eC8rDAiT1OM&list=PLZ2ovOgdI-kX3XFj77zlvSQYhJyJSYQWr&index=3
IMPORTANTE:
1) Al crear los factorys hacerlo así:
2) Al crear los factorys por defecto te crea:
cambiarlo por el correspondiente:
3) En UserSeeder.php al crear el usuario con Create da problemas, mejor hacerlo con DB:
Para volver a pasar de nuevo todas las migraciones, seeders y demás:
IMPORTANTE:
1) Al crear los factorys hacerlo así:
php artisan make:factory Post
y no como dice el tutorial:
php artisan make:factory PostFactory
2) Al crear los factorys por defecto te crea:
protected $model = Model::class;
cambiarlo por el correspondiente:
protected $model = Post::class;
3) En UserSeeder.php al crear el usuario con Create da problemas, mejor hacerlo con DB:
DB::table('users')->insert(
'name' => 'Pepito Pérez',
'email' => 'pepitoperez@gmail.com',
'password' => bcrypt('12345678')
]
);
Para volver a pasar de nuevo todas las migraciones, seeders y demás:
php artisan migrate:fresh --seed
Laravel 7: Seeder y Factory
php artisan make:seeder UsersTableSeeder
Si User::create da el create problemas hacerlo con insert:
Más información en:
https://laravel.com/docs/7.x/seeding
Por defecto Laravel te crear el UserFactory.php:
php artisan make:seeder EntriesTableSeeder
Crear el factory para Entry:
php artisan make:factory EntryFactory
Por supuesto para que se ejecuten estos seeders hay que llamarlos desde el DatabaseSeeders.php:
Para borrar toda la BD, generarla de nuevo y que tire de los seeds:
php artisan migrate:fresh --seed
use App\User;
...
User::create([
'name' => 'Pepito Pérez',
'email' => 'pepitoperez@gmail.com',
'password' => bcrypt('12345678')
]);
factory(User::class, 10)->create();
Si User::create da el create problemas hacerlo con insert:
DB::table('users')->insert([
'name' => 'xxxx',
'email' => 'xxx@gmail.com',
'password' => bcrypt('12345678')
])
Más información en:
https://laravel.com/docs/7.x/seeding
Por defecto Laravel te crear el UserFactory.php:
$factory->define(User::class, function (Faker $faker) {
return [
nbsp; 'name' => $faker->name,
nbsp; 'email' => $faker->unique()->safeEmail,
nbsp; 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
nbsp; 'remember_token' => Str::random(10),
];
});
php artisan make:seeder EntriesTableSeeder
use App\Entry;
public function run()
{
factory(Entry::class, 100)->create();
}
Crear el factory para Entry:
php artisan make:factory EntryFactory
use App\Entry;
...
$factory->define(Entry::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'content' => $faker->text,
'user_id' => 1
];
});
Por supuesto para que se ejecuten estos seeders hay que llamarlos desde el DatabaseSeeders.php:
public function run()
{
$this->call(UsersTableSeeder::class);
$this->call(EntriesTableSeeder::class);
}
Para borrar toda la BD, generarla de nuevo y que tire de los seeds:
php artisan migrate:fresh --seed
Modelos: Crear modelo y su correspondiente seeder en una sola instrucción
Para el seeder solo hay que poner "-a"
php artisan make:model Estudiante -a
Seeders
Lo primero de todo es (si no existe ya) crear una función en el fichero database/seeds/DatabaseSeeder.php:
OJO: siempre que se use DB hay que incluir:
Ahora creamos un nuevo model con su migración:
En esa nueva migración rellenar los campos que se quieran en el run:
Y ejecutar el migrate para que se cree dicha tabla en la BD:
Ahora crear el Seeder:
y en el run de este seeder:
Todo seeder que se cree hay que añadirlo al DatabaseSeeder
Por lo que en el run del DatabaseSeeder.php:
Y ya simplemente ejecutar:
Si en vez de usar un array queremos que nos genere nombres aleatorios sería:
protected function truncateTablas(array $tablas) {
DB::statement('SET FOREIGN_KEY_CHECKS = 0;');
foreach ($tablas as $tabla) {
DB::table($tabla)->truncate();
}
DB::statement('SET FOREIGN_KEY_CHECKS = 1;');
}
OJO: siempre que se use DB hay que incluir:
use Illuminate\Support\Facades\DB;
Ahora creamos un nuevo model con su migración:
php artisan make:model Provincia --migration
En esa nueva migración rellenar los campos que se quieran en el run:
Schema::create('provincias', function (Blueprint $table) {
$table->id();
$table->string("nombre_provincia");
$table->timestamps();
});
Y ejecutar el migrate para que se cree dicha tabla en la BD:
php artisan migrate
Ahora crear el Seeder:
php artisan make:seeder TablaProvinciaSeeder
y en el run de este seeder:
$provincias = ['Álava', 'Albacete', 'Alicante', 'Almería', 'Asturias', 'Ávila', 'Badajoz'];
foreach ($provincias as $clave=>$value) {
DB::table('provincias')->insert([
'nombre_provincia' => $value
]);
}
Todo seeder que se cree hay que añadirlo al DatabaseSeeder
Por lo que en el run del DatabaseSeeder.php:
$this->truncateTablas([
'provincias'
]);
$this->call(TablaProvinciaSeeder::class);
Y ya simplemente ejecutar:
php artisan db:seed
Si en vez de usar un array queremos que nos genere nombres aleatorios sería:
use Illuminate\Support\Str;
...
for ($i=0;$i<50;$i++) {
DB::table('provincias')->insert([
'nombre_provincia' => Str::random(15)
]);
}
Seeders y migraciones
php artisan make:seeder ProfessionSeeder
Editamos el seeder:
public function run() {
$idProf = Profession::where('title', 'Profesión Dos')->value('id');
User::create([
'name' => 'uno',
'email' => 'uno2@gmail.com',
'password' => bcrypt('1234'),
'profession_id' => $idProf
]);
}
Migraciones y ejecutar los Seed:
php artisan migrate:fresh --seed
Tb se puede hacer en dos líneas:
php artisan migrate
php artisan db:seed
Para ejecutar el seeder de solo uno específico:
php artisan db:seed --class=UsersTableSeeder
Error al migrar de email no es único:
En app\Providers\AppServiceProvider.php:
public function boot() {
Schema::defaultStringLength(191);
}
Suscribirse a:
Entradas (Atom)