วิธีสร้าง Multi-Vendor Marketplace ด้วย Laravel
การสร้างตลาดกลาง (Marketplace) คือปัญหาด้านข้อมูล
นักพัฒนาส่วนใหญ่มักคิดว่าส่วนที่ยากที่สุดคือแดชบอร์ดของผู้ขาย แต่มันไม่ใช่ ความท้าทายที่แท้จริงคือ Multi-tenancy คุณต้องมั่นใจว่าทุกๆ คิวรี (query) จะตอบคำถามเพียงข้อเดียวคือ: ใครเป็นเจ้าของข้อมูลนี้?
หากคุณสร้างร้านค้าแบบมาตรฐานแล้วพยายามจะเพิ่มผู้ขายในภายหลัง คุณจะต้องเผชิญกับการเขียนโค้ดใหม่ทั้งหมด คุณต้องแทรก vendor ID เข้าไปในทุกๆ model, ทุกๆ query และทุกๆ ตะกร้าสินค้า หากคุณพลาดการกรอง (filter) เพียงจุดเดียว ผู้ขายรายหนึ่งอาจเห็นคำสั่งซื้อของผู้ขายอีกรายได้ นั่นคือการที่ข้อมูลรั่วไหล
คุณมี 3 ทางเลือก:
- สร้างเอง: คุณต้องเขียน scoping clause ทุกตัว ซึ่งมีค่าใช้จ่ายสูงและมีความเสี่ยง
- ใช้ร้านค้าแบบ single-tenant พร้อมส่วนเสริม: คุณต้องนำคอลัมน์ vendor ไปแปะไว้บน schema ที่ไม่ได้ถูกออกแบบมาเพื่อสิ่งนี้ การแยกข้อมูล (isolation) จะยังคงเปราะบาง
- ใช้โครงสร้างพื้นฐานแบบ multi-tenant: ใช้แพ็กเกจอย่าง Aimeos ที่สร้างระบบการแยกข้อมูล (isolation) เข้าไปใน data model ตั้งแต่วันแรก
นี่คือวิธีเปลี่ยนร้านค้าเดี่ยวให้กลายเป็นตลาดกลางโดยใช้ Aimeos:
1. ติดตั้งโครงสร้างพื้นฐาน
รันคำสั่งนี้เพื่อเริ่มต้น:
composer create-project aimeos/aimeos myshop
2. เปิดใช้งานโหมด multi-vendor
คุณไม่จำเป็นต้องเขียนฐานข้อมูลใหม่ เพียงแค่เปลี่ยนบรรทัดเดียวในไฟล์ .env:
SHOP_MULTISHOP=true
แฟล็ก (flag) นี้จะทำการกำหนดขอบเขต (scope) ให้กับทุก route, API และ admin panel ไปยังไซต์ที่เฉพาะเจาะจงโดยอัตโนมัติ ระบบจะจัดการการแยกข้อมูลให้คุณเอง
3. เปิดใช้งานการลงทะเบียนด้วยตนเอง (self-service onboarding)
เพื่อการขยายตัว ให้ผู้ขายสามารถลงทะเบียนได้ด้วยตนเอง เพิ่มสิ่งนี้ใน .env:
SHOP_REGISTRATION=true
ผู้ขายรายใหม่จะเข้าถึงได้เฉพาะแคตตาล็อก, คำสั่งซื้อ และลูกค้าของตนเองเท่านั้น พวกเขาไม่สามารถเห็นข้อมูลอื่นใดได้เลย
ทำไมวิธีนี้ถึงได้ผล:
Aimeos จัดระเบียบทุกอย่างรอบๆ "site" ทุกผลิตภัณฑ์, ราคา และคำสั่งซื้อ จะมี site ID ติดไปด้วย เลเยอร์ข้อมูล (data layer) จะทำการกรองสิ่งนี้ให้โดยอัตโนมัติ คุณไม่จำเป็นต้องเขียน "where site_id = ?" เพราะระบบจัดการให้คุณแล้ว
แนวทางนี้แก้ปัญหาหลัก 3 ประการ:
- ความปลอดภัย: การแยกข้อมูล (Data isolation) เป็นคุณสมบัติของฐานข้อมูล ไม่ใช่แค่โค้ดส่วนหนึ่งที่คุณอาจลืมเขียน
- ความซับซ้อน: ผู้ขายสามารถจัดการผลิตภัณฑ์ที่ซับซ้อน เช่น การสมัครสมาชิก (subscriptions) หรือสินค้าแบบชุด (bundles) ได้โดยที่คุณไม่ต้องเปลี่ยน schema
- การชำระเงิน: คุณสามารถใช้ส่วนเสริมอย่าง Stripe เพื่อแบ่งยอดชำระเงินได้ทันที แพลตฟอร์มจะหักค่าคอมมิชชันและผู้ขายจะได้รับส่วนที่เหลือ
เลิกเสียเวลากับงานวางระบบพื้นฐาน (plumbing) แล้วเริ่มสร้างตลาดกลางของคุณได้เลย
Source: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a
