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
Projelerim için kendi kendine barındırılan bir REST API istemcisi geliştirdim, işte nedenleri
Laravel’in Gözlemci Desenini Sütun İzleyicileri ile Yeniden Düşünmek
Laravel Geliştiricileri Aranıyor – DEV Community
Laravel’de Inertia + React Kullanarak shadcn/ui Entegrasyonu (Adım Adım Kılavuz)
Laravel’de Repository Deseni: Karmaşık Kodunuzu Temizleyin
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

Eric Trump Destekli Humanoid Şirketi, Askeri Robotlar Geliştiriyor!
Genel
Acil: ABD, 43 milyon dolarlık yatırım dolandırıcılığında iki kişiyi suçladı
Siber Güvenlik
Hasbro ve Nintendo’dan Zelda Oyuncakları için Heyecan Verici İşbirliği
Oyun
CISA, Paylaşılan SharePoint RCE Sıfır Günü CVE-2026-58644’ü Acil Duyurdu
Siber Güvenlik
CISA’dan Kritik Uyarı: Fortinet Açıkları için Acil Önlem Alın!
Siber Güvenlik
Fortnite Yüzme Kostümleri Heyecan Verici Yeni Bir Dönem Açabilir
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?