Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel ile Çoklu Kiracı SaaS Oluşturma: LaraFoundry Yaklaşımı
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel ile Çoklu Kiracı SaaS Oluşturma: LaraFoundry Yaklaşımı

Yazılım

Laravel ile Çoklu Kiracı SaaS Oluşturma: LaraFoundry Yaklaşımı

teknomers
Son güncelleme: 20 Ocak 2026 17:36
teknomers
Paylaş
Paylaş

Son birkaç hafta boyunca, Laravel için modüler bir SaaS motoru olan LaraFoundry üzerine çalıştım. En büyük zorluk? Çoklu kiracılığı doğru bir şekilde uygulamak.

Bu makalede, yaklaşımımı paylaşacağım: veritabanı yapısı, özelliklerle otomatik izolasyon ve kapsamlı test stratejileri.



Çoklu Kiracılık Zorluğu

SaaS uygulamaları geliştirirken, verileri kiracılar (şirketler, organizasyonlar, hesaplar) arasında izole etmeniz gerekir. Bunu yanlış yaparsanız, Şirket A Şirket B’nin verilerini görebilir. 😱

Üç ana yaklaşım vardır:

  1. Kiracı başına ayrı veritabanları – Tam izolasyon, karmaşık işlemler
  2. Kiracı başına ayrı şemalar – Orta düzeyde izolasyon, orta karmaşıklık
  3. Paylaşılan veritabanı, satır düzeyinde izolasyon – Basit işlemler, disiplin gerektirir

LaraFoundry için 3. seçeneği tercih ettim. İşte nedeni.



Neden Paylaşılan Veritabanı?

Avantajlar:

  • ✅ Daha basit işlemler (yönetilecek tek bir veritabanı)
  • ✅ 100-1000 kiracı için daha iyi
  • ✅ Maliyet etkin
  • ✅ Yedekleme ve göçler daha kolay
  • ✅ Kiracılar arası raporlama (yöneticiler için)

Dezavantajlar:

  • ⚠️ Dikkatli kodlama gerektirir (elle filtreleme yok!)
  • ⚠️ Küresel kapsamlar çok önemlidir
  • ⚠️ Test etmek şarttır

Kohana (LaraFoundry için test alanım) için, paylaşılan veritabanı mantıklıydı. 10,000+ kiracıya ölçeklenmem gerekirse, durumu tekrar gözden geçiririm.



Veritabanı Şeması

İşte temel yapı:

CREATE TABLE companies (
    id BIGINT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    subdomain VARCHAR(100) UNIQUE,
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    company_id BIGINT NOT NULL,
    name VARCHAR(255),
    email VARCHAR(255),
    FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
    UNIQUE(company_id, email),
    INDEX(company_id)
);

CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    company_id BIGINT NOT NULL,
    user_id BIGINT,
    total DECIMAL(10,2),
    FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE,
    INDEX(company_id, created_at)
);
Enter fullscreen mode

Exit fullscreen mode

Ana kararlar:

  1. Her kiracı kapsamındaki tabloda company_id – Null olamaz
  2. Cascade ile yabancı anahtarlar – Şirket silinirse tüm veriler silinir
  3. Kompozit dizinler – (company_id, created_at) performans açısından önemlidir
  4. Tekil kısıtlamalar – (company_id, email) şirket içinde tekrarları engeller



BelongsToCompany Özelliği

Manuel where('company_id', ...) kullanmak hata yapma olasılığını artırır. Bir hata = veri sızıntısı.

Çözüm: Küresel kapsamlar kullanarak bir trait geliştirmek.


namespace App\Traits;

use Illuminate\Database\Eloquent\Builder;

trait BelongsToCompany
{
protected static function bootBelongsToCompany(): void
{
static<:>

addGlobalScope('company', function (Builder $builder) {
if (auth()<:>check() <:>&&
auth<:>())->user()->company_id) <:>(){
$builder<:><:>->

where($builder<:><:>getModel()->getTable() . '.company_id',
auth()<:>
<:>->

user()->company_id

}

});

};
$this->company

;


use

BelongsToCompany

;

Faireuse:

class Order

// ← Tek bir satır!


Kaynak: Orijinal Makale

Laravel OpenAI Entegrasyonu: Kapsamlı Üretim Rehberi
Pazarlama “Gücü” vs. Mühendislik “Torku”: Laravel ve Maravel Ayrımı
Laravel Forge için Açık Kaynak Alternatifi Geliştirdik – İşte Nedenleri
Obsidian Admin Tanıtımı: Vue 3 + Laravel Yönetim Çerçevesi
Paket Tuzağından Kurtulmak: Laravel Fabric’i Neden Geliştirdim
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Netflix Warner Bros için nakit teklifini güncelleyerek Paramount’a karşı koyuyor
Sonraki Makale Acil: Anthropic MCP Git Sunucusundaki 3 Kritik Açık!

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Sağlık Takibi Doğruluğu Bazen Abartılıyor mu?
Liste
Avrupa Kendi AI’sını İstiyor: Amerikan Etkisine Son!
Genel
PC Meraklıları için Hoto Araçlarında %55’e Kadar İndirim Fırsatı
Donanım
Laravel Filament Çoklu Kiracı Başlangıç Seti – Uygulamanızı Hızla Geliştirin
Yazılım
Yaz dönemi oyun dünyasını sarsacak 10 harika oyun seçimi
Oyun
Kritik! Amazon Q Geliştirici Açığıyla Kötü Niyetli Kod Çalıştırılabilir
Siber Güvenlik
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?