I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

ازاي تبني تطبيق SaaS بـ Laravel: دليلك العملي للمحترفين

ازاي تبني تطبيق SaaS بـ Laravel: دليلك العملي للمحترفين كتير مننا كمبرمجين بيحلم يعمل منتج خاص بيه، فكرة تطبيق SaaS (Software as a Service) بقت هي "التريند" دلو

ازاي تبني تطبيق SaaS بـ Laravel: دليلك العملي للمحترفين
Reading Count: 88

ازاي تبني تطبيق SaaS بـ Laravel: دليلك العملي للمحترفين

كتير مننا كمبرمجين بيحلم يعمل منتج خاص بيه، فكرة تطبيق SaaS (Software as a Service) بقت هي "التريند" دلوقتي لأنها بتوفر دخل مستمر وموديل بزنس ناجح. لكن بمجرد ما بتبدأ، بتصدم بواقع مرير: إزاي هفصل بيانات المستخدمين عن بعض؟ وإزاي أتحكم في اشتراكاتهم؟ لو لسه بتسأل الأسئلة دي، فالمقال ده معمول عشانك.

يعني إيه SaaS وهل لاراڤيل (Laravel) اختيار صح؟

تطبيق الـ SaaS هو باختصار إنك تبني "سيستم" واحد بيستخدمه أكتر من عميل (Tenant)، وكل عميل شايف بياناته هو بس. لاراڤيل هي الـ Framework الأقوى للمهمة دي بفضل الـ Ecosystem الجبار بتاعها اللي بيسهل عليك التعامل مع قواعد البيانات، الـ Queue، والـ Billing.

تحدي تعدد المستأجرين (Multi-tenancy)

تعدد المستأجرين هو قلب تطبيق الـ SaaS. عندك طريقتين أساسيتين للهيكلة:

  • قاعدة بيانات واحدة (Single Database): كل الجداول فيها عمود اسمه tenant_id. دي الأسهل في التطوير، لكن مخاطرها عالية لو حصل خطأ في الكود (ممكن عميل يشوف بيانات عميل تاني).
  • قاعدة بيانات منفصلة (Separate Databases): كل عميل له قاعدة بيانات خاصة بيه. دي الأكثر أماناً وعزلاً، لكنها بتزود التعقيد في الـ Migration والـ Maintenance.

تصميم هيكل قاعدة البيانات (Database Schema)

عشان تبدأ صح، لازم يكون عندك جدول للـ Tenants (الشركات المشتركة في الخدمة). شوف المثال ده لهيكلة بسيطة:


Schema::create('tenants', function (Blueprint $table) {
    $table->uuid('id')->primary();
    $table->string('name');
    $table->string('domain')->unique(); // رابط خاص لكل مستأجر
    $table->timestamps();
});

بعد كدة، أي جدول محتاج تعمله "Isolation" لازم تضيف فيه الـ tenant_id، وتستخدم الـ Global Scope في لاراڤيل عشان تضمن إن مفيش حد يقدر يوصل لبيانات مش بتاعته:


protected static function booted()
{
    static::addGlobalScope('tenant', function (Builder $builder) {
        $builder->where('tenant_id', tenant()->id);
    });
}

أدوات هتختصر عليك الطريق

مش لازم تخترع العجلة من الأول. في حزمة (Package) اسمها Tenancy for Laravel، ودي تعتبر المعيار الذهبي حالياً. بتوفرلك:

  • إدارة الـ Domains والـ Subdomains أوتوماتيكياً.
  • التبديل بين قواعد البيانات في الـ Runtime.
  • دعم كامل للـ Migrations في كل الـ Tenants.

نصيحة من أخ لمبرمج زيه

يا صديقي، أكبر غلطة بيقع فيها المبرمج في بداية مشوار الـ SaaS هي "Over-engineering". ماتحاولش تبني كل حاجة من الصفر. ركز في الأول على الـ Core Feature اللي بتقدم قيمة حقيقية للعميل، واستخدم الأدوات الجاهزة عشان تسرع الـ Time-to-Market. ولو عايز تتعمق أكتر، ابدأ بـ قراءة الـ Documentation بتاع حزمة Tenancy for Laravel، هي لوحدها كفيلة تخليك تبني السيستم في وقت قياسي.

ابعتلي في التعليقات لو عايز جزء تاني نتكلم فيه عن الـ Subscriptions والربط مع بوابة دفع زي Stripe!


Share

Related posts

Apr 26, 2026 • 1 min read
Reading Count: 4
إزاي تكتب كود PHP نظيف (Clean Code) وتخلص من كابوس الـ Spaghetti Code

إزاي تكتب كود PHP نظيف (Clean Code) وتخلص من كابوس الـ Spaghetti Code أكيد مريت بالموقف ده قبل كدة،...

Apr 26, 2026 • 1 min read
Reading Count: 17
الفرق بين الكلاس المجرد (Abstract Class) والواجهة (Interface) في لغة PHP

الفرق بين الكلاس المجرد (Abstract Class) والواجهة (Interface) في لغة PHP أهلاً بيك يا صديقي المبرمج....

Apr 25, 2026 • 1 min read
Reading Count: 246
ليه لازم تنقل مشاريعك لـ PHP 8 فوراً؟ التغيير اللي هيخليك تحب البرمجة تاني

ليه لازم تنقل مشاريعك لـ PHP 8 فوراً؟ التغيير اللي هيخليك تحب البرمجة تاني لو كنت مبرمج بقالك فترة ب...