Cómo construir un marketplace multi-vendedor con Laravel
Construir un marketplace es un problema de datos.
La mayoría de los desarrolladores piensan que la parte difícil es el panel del vendedor. No es así. El verdadero desafío es la multi-tenencia (multi-tenancy). Debes asegurarte de que cada consulta responda a una pregunta: ¿Quién es el dueño de estos datos?
Si construyes una tienda estándar e intentas añadir vendedores más tarde, te enfrentarás a una reescritura. Tienes que integrar un ID de vendedor en cada modelo, cada consulta y cada carrito. Si olvidas un solo filtro, un vendedor verá los pedidos de otro vendedor. Eso es una fuga de datos.
Tienes tres opciones:
- Construirlo tú mismo: Escribes cada cláusula de alcance (scoping clause). Es costoso y arriesgado.
- Usar una tienda de un solo inquilino (single-tenant) con complementos: Injertas columnas de vendedor en un esquema que no fue diseñado para ello. El aislamiento sigue siendo frágil.
- Usar una base multi-inquilino (multi-tenant): Utiliza un paquete como Aimeos que integra el aislamiento en el modelo de datos desde el primer día.
Aquí te explicamos cómo convertir una tienda única en un marketplace usando Aimeos:
1. Instala la base
Ejecuta este comando para comenzar:
composer create-project aimeos/aimeos myshop
2. Activa el modo multi-vendedor
No necesitas reescribir tu base de datos. Solo cambia una línea en tu archivo .env:
SHOP_MULTISHOP=true
Este flag delimita automáticamente el alcance de cada ruta, API y panel de administración a un sitio específico. El sistema se encarga de la separación de datos por ti.
3. Activa el registro de autoservicio
Para escalar, permite que los vendedores se registren ellos mismos. Añade esto a tu .env:
SHOP_REGISTRATION=true
Los nuevos vendedores obtienen acceso solo a su propio catálogo, pedidos y clientes. No pueden ver nada más.
Por qué esto funciona:
Aimeos organiza todo en torno al "sitio". Cada producto, precio y pedido lleva un ID de sitio. La capa de datos filtra esto automáticamente. No tienes que escribir where site_id = ? porque el sistema lo hace por ti.
Este enfoque resuelve tres problemas principales:
- Seguridad: El aislamiento de datos es una propiedad de la base de datos, no un fragmento de código que podrías olvidar.
- Complejidad: Los vendedores pueden gestionar productos complejos como suscripciones o paquetes (bundles) sin que tengas que cambiar el esquema.
- Pagos: Puedes usar extensiones como Stripe para dividir los pagos instantáneamente. La plataforma toma una comisión y el vendedor recibe el resto.
Deja de construir tuberías. Empieza a construir tu marketplace.
Fuente: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a
