2016-06-08 18 views
7

Bir Ürün modeli varLaravel Eloquent modelinde özel bir işlev nasıl eklenir?

class Product extends Model 
{ 
    ... 

    public function prices() 
    { 
     return $this->hasMany('App\Price'); 
    } 

    ... 
} 

ben en düşük fiyatı dönecek bir fonksiyon eklemek istediğiniz ve denetleyici içinde kullanıyorum değerini elde edebilirsiniz: Ben Ürün modelinde bu katma

Product::find(1)->lowest; 

:

:

public function lowest() 
{ 
    return $this->prices->min('price'); 
} 

ama söyleyen bir hata var

Product::find(1)->lowest(); kullanırsam, çalışır. Çalışmak için Product::find(1)->lowest; almak mümkün mü?

Herhangi bir yardım için teşekkür ederiz.

+0

i tgat bir hasone ilişkisi için sadece çalışacağını düşünüyorum bir yöntem aradığınız ve fark nedir çünkü hiçbir ofc? birlikte veya ayrı! –

cevap

19

Modeldeki bir işleve bir değişken olarak erişmeye çalıştığınızda, laravel ilgili bir modeli almaya çalıştığınızı varsayar. Onlara dinamik özellikler diyorlar. Bunun yerine ihtiyacınız olan özel bir özelliktir. senin modeline yöntemle aşağıdaki

eklenti:

Şimdi
public function getLowestAttribute() 
{ 
    //do whatever you want to do 
    return 'lowest price'; 
} 

Böyle erişmek mümkün olmalıdır: Sadece bunu yok neden

Product::find(1)->lowest; 
+1

Bunu, alttaki tabloda sütun olarak tanımlanmayan özniteliklerle yapabileceğinizi farketmedim; belgelere bahsetmedim (bulabildiğim). –

+0

Merhaba Laravel belgelerinde nerede bulabileceğimi de bilmek isterdim. Teşekkürler. – sanders

+0

Bunun en düşük olması gerektiğini düşünüyorum(); - Ben bu bitmeden bir ilişki hatası alıyorum '()' – caro

1

? Biliyorum, belirli bir şey için istediğin şey değil, bazen kötü bir uygulama olabilir. Ama senin durumunda, bu iyi bir şey.

$product = Product::find(1)->with(['prices' => function ($query) { 
    $query->min('price'); 
}])->get(); 
+0

Modelde açıkça bir işlev talep ediyor. –

+0

Biliyorum, ona ikinci bir önprogram verdim. –

8

Kullanım Eloquent accessors

public function getLowestAttribute() 
{ 
    return $this->prices->min('price'); 
} 

Sonra

$product->lowest; 
İlgili konular