Saltar al contenido

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 SqlFileSeeder

Se 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 archivo products.sql que guardaremos en la carpeta database/seeders.

  • DB::unprepared(file_get_contents($path)): Se lee el contenido del archivo .sql y 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=SqlFileSeeder

2. 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

  1. Borrado de la tabla (opcional): Primero se hace un DROP TABLE IF EXISTS para evitar errores si la tabla ya existe.

  2. Creación de la tabla: Definimos la estructura de products con id, name, price, category, y los timestamps created_at y updated_at.

  3. 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

  1. Asegúrate de la Compatibilidad: Si tu archivo .sql incluye sintaxis propia de MySQL, PostgreSQL u otro motor de base de datos, cerciórate de que coincida con el driver que uses en Laravel.

  2. Dividir en Varios Archivos: Si tu base de datos es muy grande o tienes múltiples tablas, considera usar varios archivos .sql o un script que los ejecute secuencialmente.

  3. Versionado de la Base de Datos: Usar .sql puede ser rápido, pero considera emplear migrations para controlar versiones y evitar conflictos entre ambientes.

  4. Evitar Entornos de Producción: En producción, normalmente se usan migrations y seeders “controlados” en PHP. Inyectar un .sql grande 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!

school Curso completo

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.

access_time 8 horas de contenido
layers 4 tecnologías en 1
update 100% actualizado
code Proyectos prácticos
Ver Curso Laravel 12 arrow_forward

star Incluido en cualquier suscripción

Rutas de aprendizaje