Cuando trabajas con Laravel, normalmente se utiliza Eloquent o la clase DB para crear los registros directamente en tu archivo de seeder. Sin embargo, en algunos proyectos puede resultar más cómodo o rápido partir de un archivo .sql que contenga las sentencias de creación e inserción de datos para popular la base de datos.
En este artículo veremos cómo hacerlo usando el método unprepared de la facade DB.
1. Configurar el Seeder
1.1. Crear un Seeder Personalizado
Para comenzar, creamos un seeder con el siguiente comando:
artisan make:seeder SqlFileSeederSe generará un archivo en database/seeders/SqlFileSeeder.php. Allí es donde incluiremos la llamada a nuestro archivo .sql.
1.2. Cargar el Archivo SQL con unprepared
Dentro del método run() del seeder, podemos hacer algo como:
database_path('seeders/products.sql'): Construye la ruta absoluta hacia el archivoproducts.sqlque guardaremos en la carpetadatabase/seeders.DB::unprepared(file_get_contents($path)): Se lee el contenido del archivo.sqly se ejecuta como una única instrucción “sin preparar”. Esto significa que Laravel no intentará parsear ni manipular la consulta, simplemente la enviará tal cual a la base de datos.
1.3. Ejecutar el Seeder
Podrías ejecutar sólo este seeder si lo registras en DatabaseSeeder.php, o directamente desde la CLI:
artisan db:seed --class=SqlFileSeeder2. Ejemplo de Archivo SQL (products.sql)
Aquí tienes un ejemplo de un archivo products.sql que crea una tabla de productos electrónicos y la llena con algunos datos de prueba:
Explicación
Borrado de la tabla (opcional): Primero se hace un
DROP TABLE IF EXISTSpara evitar errores si la tabla ya existe.Creación de la tabla: Definimos la estructura de
productsconid,name,price,category, y los timestampscreated_atyupdated_at.Inserción de datos: Se añaden varios productos de ejemplo con precios y categorías diferentes.
Nota: Ajusta los tipos de datos o las columnas según las necesidades de tu proyecto.
3. Recomendaciones y Buenas Prácticas
Asegúrate de la Compatibilidad: Si tu archivo
.sqlincluye sintaxis propia de MySQL, PostgreSQL u otro motor de base de datos, cerciórate de que coincida con el driver que uses en Laravel.Dividir en Varios Archivos: Si tu base de datos es muy grande o tienes múltiples tablas, considera usar varios archivos
.sqlo un script que los ejecute secuencialmente.Versionado de la Base de Datos: Usar
.sqlpuede ser rápido, pero considera emplear migrations para controlar versiones y evitar conflictos entre ambientes.Evitar Entornos de Producción: En producción, normalmente se usan migrations y seeders “controlados” en PHP. Inyectar un
.sqlgrande en producción puede no ser lo ideal, salvo en casos planificados (importaciones masivas, data dumps, etc.).
4. Integración con Otros Seeders
En caso de que quieras ejecutar este seeder junto a otros seeders de Laravel, edita tu archivo database/seeders/DatabaseSeeder.php:
De esta forma, con un simple php artisan db:seed, se ejecutarán todos los seeders, incluyendo el que hace DB::unprepared.
Conclusión
A veces, la forma más rápida de introducir datos en tu base es contando con archivos SQL ya preparados. Laravel te brinda flexibilidad para ejecutar dichas sentencias a través de la facade DB y el método unprepared, integrándolo con su sistema de seeders. Esto puede resultar muy útil para importar grandes dumps de datos o tablas predefinidas que no cambian a menudo.
¿Ya has implementado seeding con archivos SQL en tus proyectos Laravel? ¡Comparte esta entrada con tus colegas y no olvides explorar la Ruta de Aprendizaje Laravel 11!
Curso Laravel 12
Completo 2026
El único curso 100% actualizado que incluye Laravel 12, Livewire 3, Vue 3, React 19 e Inertia 2. Aprende con proyectos reales y las últimas funcionalidades.
star Incluido en cualquier suscripción