Los seeders son el mecanismo que tenemos para generar datos de prueba de una manera sencilla; están fuertemente vinculadas con los modelos en CodeIgniter 4, ya que el problema que tienen las migraciones, es que al hacer el rollback, perdemos toda la data de prueba... pero con los seeders podemos conseguir nuevamente esta data en muy poco tiempo; en vez de crearla nosotros de manera manual.
Los seeders o semilleros, los podemos generar via la linea de comandos; siguiente el esquema recomendado, deberíamos crear uno por entidad o al menos uno; pero debemos evitar manejar desde un solo archivo múltiples entidades, pero podrías por ejemplo si lo ves necesario, generar dos semilleros para generar usuarios diferentes, con diferentes roles.
Generar el seeder mediante spark
El comando es:
$ php spark db:seed UserSeederDonde <UserSeeder> es el nombre que quieras darle a tu seeder; una vez definido, lo ejecutamos de la siguiente manera:
$ php spark db:seed <NombreSeeder>En donde UserSeeder es el nombre que le quieras dar al archivo y clase
Tenemos una función llamada run, que es la que empleamos para generar la data de prueba, ya sea de manera individual o en un ciclo en base a alguna condición; en nuestro caso, generamos unos 6 usuarios de prueba
public function run()
{
$userModel = new UserModel();
for ($i = 0; $i < 5; $i++) {
$userModel->insert([
'username' => 'user' . $i,
'email' => "user$i@gmail.com",
'password' => '12345'
]);
}
}Luego, para ejecutar el seeder:
php spark make:seeder UserSeederY listo, cuando revisemos la base de datos, veremos nuestros usuarios generados.
Seeder anidados
Los seeders, son una solución prácticamente automatizados, pero estar ejecutando un seeder por vez mediante la línea de comandos, puede que no sea la mejor opción para ti si tienes muchos modelos definidos en tu aplicación, en esos casos, es posible anidar los seeder; para eso, podemos crear un seeder maestro:
$ php spark make:seeder TodosSeederEn el cual, mediante la función call(), especificamos en nombre de los seeders que queremos anidar o agrupar en este seeder; así que, ejecutamos el seeder llamado TodosSeeder:
app\Database\Seeds\TodoSeeder.php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class TodosSeeder extends Seeder
{
public function run()
{
$this->call('PeliculaSeeder');
$this->call('CategoriaSeeder');
}
}Y como resultado, aparecerá que se ejecutaron todos nuestros seeders.
Seeded: App\Database\Seeds\PeliculaSeeder
Seeded: App\Database\Seeds\CategoriaSeeder
Seeded: App\Database\Seeds\TodosSeederUn caso interesante ya para terminar, es que si al ejecutar el comando de db:seed, no le pasas argumentos:
$ php spark db:seedSpark te preguntará el nombre de la clase seeders, que quieres ejecutar:
CodeIgniter v4.1.7 Command Line Tool - Server Time: 2026-02-09 14:31:12 UTC-06:00
Seeder name : PeliculaSeeder
Seeded: App\Database\Seeds\PeliculaSeeder
PS C:\laragon\www\test\peliculas>El siguiente paso consiste en conocer la herramienta de línea de comandos en CodeIgniter 4, Spark.