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’in Fabrika İlişkilerinizi Neden Tahmin Edemediği
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’in Fabrika İlişkilerinizi Neden Tahmin Edemediği

Yazılım

Laravel’in Fabrika İlişkilerinizi Neden Tahmin Edemediği

teknomers
Son güncelleme: 14 Ocak 2026 00:33
teknomers
Paylaş
Paylaş

Laravel fabrikaları, test yazmayı kolaylaştırır, özellikle birbiriyle bağlantılı modellere sahipseniz. Ancak bazen, ilk bakışta belli olmayan yollarla kafa karıştırıcı hale gelebilir. Bu konuda harika bir video izledim ve kendi görüşlerimi paylaşmak istiyorum.


Problem

Bir Client modeli düşünün ve aynı User modeline iki ilişkisinin olduğunu varsayın.

final class Client extends Model
{
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }

    public function distributor(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }
}

Bir test yazıyorsunuz:

$owner = UserFactory::new()->create(['name' => 'Owner']);
$distributor = UserFactory::new()->create(['name' => 'Distributor']);

$client = ClientFactory::new()
    ->for($owner)
    ->for($distributor)
    ->create();

Ne oluyor? Laravel, user_id değerini distribütörün ID’sine atıyor, sahibin ID’sine değil. distributor_id ise null kalıyor. Bu, istenilen durum değil.


Neden Bu Oluyor?

Laravel bozuk değil, sadece kurallarına sadık kalıyor.

for($model) çağrıldığında, Laravel model tipine bakıyor, değişken adınıza değil. Hem $owner hem de $distributor User modeli. Laravel sizin düşüncenizi okuyamaz, bu yüzden bulduğu ilk ilişkiyi, yani user’ı alıyor. Değişken adları önemli değil.


Çözüm

Açık olmalısınız, Laravel’e hangi ilişkiyi kullanacağını belirtmelisiniz:

$client = ClientFactory::new()
    ->for($owner, 'user')
    ->for($distributor, 'distributor')
    ->create();

Artık her şey mükemmel çalışıyor. İkinci argüman, sadece ilişki adıdır.


Alternatif: for’ü atla

Bazen doğrudan olmak daha nettir:

$client = ClientFactory::new()->create([
    'user_id' => $owner->id,
    'distributor_id' => $distributor->id,
]);

Burada yanlış bir şey yok. Açıkçası, bir dizi for() çağrısı yapmaktan daha net bir yöntemdir.


Konvansiyonlar Ne Zaman Çöker?

Laravel, konvansiyonlara uymadığınızda en iyi şekilde çalışır. Client modeli bir user ilişkisine sahipse, bu mükemmeldir. Ama bir modele ikinci bir ilişki eklerken, açık bir anlamsal fark yoksa kuralları biraz esnetiyorsunuz. Kendiliğinden Laravel gözünden bakıldığında, bu bir Distributor modeli eklemenizi bile önerebilir. Bu yanlış olduğu anlamına gelmez, bazen gerçekten aynı modelde birden fazla ilişkiye ihtiyacınız olur.
Bu nedenle ilişki adlarını açıkça belirtmek, her şeyi net tutar.

Mevcut projeme baktım ve for() ile açık ilişki adı kullanan pek fazla durum bulamadım.
Sadece bir tane buldum:

$address = AddressFactory::new()
    ->for($user)
    ->has(DirectionFactory::new()
        ->has(DirectionScheduleFactory::new()->count(10), 'schedules'))
    ->create();


İsimlendirme Önemlidir

Bazı isimlendirme iyileştirmeleri karışıklığı azaltabilir:

  • Client → Customer
  • user → owner

İlişkiniz user olarak adlandırıldığında, ama alanınız “sahipler” diyorsa, gereksiz bir mental yük oluşturuyorsunuz. Açık isimler = daha az sürpriz.


Sonuç

Fabrikalar çok güçlüdür, ancak konvansiyonlara dayanır. Model tasarımınız bu konvansiyonlardan uzaklaştığında, açıklık sihirden daha iyidir:

  • İlişki adını for() metoduna geçirin veya
  • Yabancı anahtarları kendiniz ayarlayın.

Laravel tam olarak olması gerektiği gibi çalışıyor. Bizim görevimiz, niyetimizi net şekilde belirtmektir.


Yazar Notu

Okuduğunuz için teşekkürler!
Beni dev.to, LinkedIn üzerinden bulabilirsiniz veya GitHub üzerindeki çalışmalarımı kontrol edebilirsiniz.

Gerçek dünya Laravel notları.


Bu yazının ilhamını aldığım video için Joel Clermont’a teşekkürler. Onun Laravel ipuçları her zaman değerlidir.

Kaynak: Orijinal Makale

Contents
  • Problem
  • Neden Bu Oluyor?
  • Çözüm
  • Alternatif: for’ü atla
  • Konvansiyonlar Ne Zaman Çöker?
  • İsimlendirme Önemlidir
  • Sonuç
  • Yazar Notu
Laravel AI SDK ile Sesli Yazıya Dönüştürme Uygulaması Nasıl Yapılır
Başlangıç Düzeyinde Laravel Projesi: Basit Bir Blog CMS ve Yönetici Paneli Oluşturma
Kismet Yazılımı Nasıl Kurulur ve Kullanılır?
400 Satırlık Import Kontrolcülerden 20 Satırlık Konfigürasyonlara Laravel’de
Laravel Koleksiyonları: İş Mantığı İçin Neden Kullanıyorum (Sadece Kolaylık Değil)
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale İndirimli Elgato Stream Deck + ile İş Akışınızı Kolaylaştırın!
Sonraki Makale 28 Yıl Sonra İskelet Tapınağı Neler Sunuyor?

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Acil! Toshiba ve Muji websitelerinde şüpheli giriş uyarıları ortaya çıktı
Siber Güvenlik
Tatiliniz İçin 13 Çevre Dostu Paketleme İpucu ile Fark Yaratın
Genel
Kurucular VC korku hikayelerini paylaşıyor, bazıları isimleri veriyor
Genel
Control Resonant devam niteliğinde ama aynı zamanda bir başlangıç noktası mı?
Liste
Anthropic, Claude AI’nin beklenenden hızlı geliştiğini uyardı
Donanım
EA Sports’un Yeni Abonelik Sistemi Oyuncuları Heyecanlandıracak
Oyun
//

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?