Laravel Eloquent İlişkileri için Püf Noktaları

Laravel'in güçlü yönlerinden biri, zarif sözdizimi. Laravel'de çok sayıda modeliniz ve ilişkiniz varsa (veritabanındaki çok sayıda tablo nedeniyle), çapraz geçiş genellikle daha az zarif kodla sonuçlanabilir. Zamanla, aşağıda kısaca tanıtacağım üç küçük uzantı benim için kendilerini kanıtladı. Sadece bazı miras, sihirli yöntemler ve özel koleksiyonlar kullanıyoruz.


Önce app \ ConvenienceModel.php altında yeni bir model oluşturuyoruz.:

b45e29b9125c2ab565b5526442437686

Sonra tüm modellerin yeni ConvenienceModel'imizden miras almasına izin veriyoruz:

b45e29b9125c2ab565b5526442437686

Kendi işlevlerinizi ilişkilerle karıştırın

Bağlı modeller almak istiyorsanız, bunları aramak için standart sözdizimini kullanırsınız:

b45e29b9125c2ab565b5526442437686

Şimdi kendi iş mantığınızı eklerseniz, (alt) deve durumu gösterimini kullanmayı seversiniz.:

b45e29b9125c2ab565b5526442437686

Her iki varyantın sözdizimini standartlaştırmak istiyoruz. Bunu yapmak için, ConvenienceModel'e __call sihirli yöntemini ekliyoruz .:

b45e29b9125c2ab565b5526442437686

Bu çağrı bu nedenle yukarıdaki örnekte de mümkündür:

b45e29b9125c2ab565b5526442437686

Boş nesneleri kontrol edin

Ülke adını bir kişinin adresine vermek isterseniz, genellikle aşağıdaki kodu görürsünüz:

b45e29b9125c2ab565b5526442437686

Bunu engellemek için, biz dahil stringhelper kütüphane ve dönüş model bulunmazsa boş boş sınıfın özel bir nesne:

b45e29b9125c2ab565b5526442437686

Bu aynı zamanda çağrıyı başarılı kılar (bu örnekte, bir şey bulunursa, ülkenin adı çıktı, diğer tüm durumlarda boş bir dizge).

b45e29b9125c2ab565b5526442437686

42 numaralı kullanıcının var olamayabileceği durumunu da ele almak istersek, bunun için küçük bir yardımcı fonksiyon da oluşturacağız.:

b45e29b9125c2ab565b5526442437686

Bu nedenle aşağıdaki çağrı, kullanıcı hiç mevcut olmasa bile boş bir dize sunar:

b45e29b9125c2ab565b5526442437686

N: m ilişkilerini rahatça çaprazlayın

Son olarak, aşağıdaki kodu basitleştirmek istiyoruz:

b45e29b9125c2ab565b5526442437686

Bunun için özel koleksiyon olanaklarını kullanıyoruz. İlk olarak kolaylık modelini genişletiyoruz:

b45e29b9125c2ab565b5526442437686

Ardından, koleksiyonlardaki bilinmeyen işlevlerin çağrılmasının koleksiyondaki tüm öğeler için işlevi yürütmesini sağlayan \ Helpers \ ConvenienceCollection.php dosyasını oluşturuyoruz.:

b45e29b9125c2ab565b5526442437686

Bu nedenle, kişinin tüm ebeveynlerinin tüm adreslerinin tüm ülkelerinin tüm adlarını çıkarmak için aşağıdaki kodu kullanabiliriz:

b45e29b9125c2ab565b5526442437686

Ancak aşağıdaki gibi çağrılar da mümkündür:

b45e29b9125c2ab565b5526442437686

Birden çok sütuna göre sırala

Aşağıdaki çağrı yalnızca konuma göre sıralar, ancak muhtemelen istediğiniz şey bu değildi:

b45e29b9125c2ab565b5526442437686

Birkaç sütuna göre sıralamayı etkinleştirmek için ConvenienceCollection'ımızı genişletiyoruz:

b45e29b9125c2ab565b5526442437686

Bununla, koleksiyonu birkaç sütuna göre sıralayabiliriz.:

b45e29b9125c2ab565b5526442437686

Standart sıralama

ConvenienceCollection'ı başka bir yardımcı fonksiyonla genişletiyoruz:

b45e29b9125c2ab565b5526442437686

Artık her modele ayrı bir standart sıralama işlevi verebilirsiniz:

b45e29b9125c2ab565b5526442437686

Böylece bir koleksiyonu şu şekilde sıralayabiliriz::

b45e29b9125c2ab565b5526442437686

Nesne isimleri

Her model getLabel yöntemini uygular (getName, modele bağlı olarak değişir):

b45e29b9125c2ab565b5526442437686

Bununla bir nesnenin adını hızlı ve kolay bir şekilde görüntüleyebilirsiniz. Daha sonra, ConvenienceCollection öğesinde sortByLabel yardımcı yöntemini uygulayabilirsiniz.:

b45e29b9125c2ab565b5526442437686

Boş sonuçlar

Bir ara adım boşsa, Laravel birinci () ve son () fonksiyonları genellikle sıfır döndürür. Bu nedenle, aşağıdaki çağrının her zaman başarılı olması için getFirst () ve getLast () işlevlerini tanıtıyoruz.:

b45e29b9125c2ab565b5526442437686

Bununla, __x'in tanıdığı bir __empty_helper'ı geri gönderiyoruz:

b45e29b9125c2ab565b5526442437686

Geri