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ıtmak istediğim üç 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

Ardından 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, bu aramanın yukarıdaki örnekte de mümkün olduğu anlamına gelir:

b45e29b9125c2ab565b5526442437686

Boş nesneleri kontrol edin

Ülke adını kişisel bir adrese 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

Ayrıca 42 numaralı kullanıcının var olamayabileceği durumunu da ele almak istiyorsak, bunun için küçük bir yardımcı işlev de oluşturacağız:

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

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

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

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

Ardından, koleksiyonlardaki bilinmeyen işlevleri çağırmanı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

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

Aşağıdaki çağrı, muhtemelen istenmese de yalnızca konuma göre sıralar:

b45e29b9125c2ab565b5526442437686

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

b45e29b9125c2ab565b5526442437686

Daha sonra koleksiyonu birkaç sütuna göre sıralayabiliriz:

b45e29b9125c2ab565b5526442437686

Nesne adları

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

b45e29b9125c2ab565b5526442437686

Bu, bir nesnenin adını hızlı ve kolay bir şekilde vermenizi sağlar. 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

Burada __x'in tanıdığı bir __empty_helper döndürüyoruz:

b45e29b9125c2ab565b5526442437686

Geri