2016-04-14 15 views
0

Yapmaya çalıştığım şey, iç içe geçmiş bir ng-repeat içersinde Eloquent Relations'ın en hiyerarşisine sahip olmaktır.Angularjs + Laravel: İç içe geçmeli yinelenen yinelemeli ilişkilerde özelliklerini döndürme

İşte ilişki.

Order ..hasMany.. SubItems ..belongTo.. Product

model Order, hasMany modeli SubItems yoktur. Bu SubItems model belongsTo model Product.

Ben Order dizisi var ve her Order nesneden ng-repeat ile ilgili Product erişmek istiyorum.

<table> 
     <tbody ng-repeat="order in tc.orders" >//I use "as" syntax, so I use "tc."here 
      <tr ng-click="tc.showOrderDetail(order.id)"> 
       <td ng-bind="order.id"></td> 
       <!-- "order.id" works in both lines --> 
      </tr> 
       <tr ng-repeat="subItem in order.subItems"> 
        <td ng-bind="subItem.price"></td> 
        <!-- This "subItem.price" appears --> 
        <td ng-bind="subItem.product.name"></td> 
        <!-- This "subItem.product.name" doesn't appear --> 
       </tr> 
     </tbody> 
    </table> 

ilişki (SubItems) ikinci katmanı . koyarak ulaşılabilir ama görünüşe göre, üçüncü düzey (Product) erişim için farklı bir yol kullanmak gerekir.

Herhangi bir tavsiyede bulunursanız memnun olurum. Ben laravel en foreach döngüsü kullandığınızda, bundan ... ulaşılabilir

bilgiye

{{$subItem->product->name}} //This works fine!

kontrolör yöntemidir ...

public function getOrders() 
{ 
    $orders = $this->order->with('customer', 'subitems')->orderBy('id', 'desc')->get(); 
    return $orders; 
} 
+0

Lütfen denetleyici kodunuzu ekleyin. '' Ürün' 'subItem' modelinize yüklenmemelidir, bu yüzden kontrol cihazınızı görebilmeniz için – Jeff

+0

yardım etmelisiniz Jeff. Ekledim İster inanın ister inanmayın, Laravel'in forloop'unu kullandığımda hiçbir hata yaşanmadı ve 'ürün '' subitem 'ile ilişkiliydi. – Hiroki

+1

'$ subItem-> product' öğesini çağırdığınızda, otomatik olarak sizin için yükler. JSON formunda görünmesini istiyorsanız elle yüklemek zorundasınız – Jeff

cevap

1

Kodunuzda Laravel'in Proje Modelini Subitem Mode'unuza yüklemesini istemediğini söylemezsiniz. l. Eğer şöyle Ürün istekli yükleme eklemek gerekir:

$this->order->with('customer', 'subitems.product')->orderBy('id', 'desc')->get(); 

ve diğer javascript nesne gibi erişebilmesi subItem.product.name

o laravel foreach döngüsünde sizin için çalışmış nedeni çünkü bir böyle bir ilişki istediğinde Laravel'de $subItem->product numaralı öznitelik ve bir yöntem olarak değil, Laravel, Eloquent nesnesini otomatik olarak Model nesnesine iliştirir.

+0

Çok teşekkür ederim. Bir soru daha sormak istiyorum ... Belgeleri okuduktan sonra, Laravel'deki modeller arasında bir nokta ('.') koymanın yaygın bir uygulama olduğunu düşünmüyorum. Kontrolörlerdeki Eloquent ilişkilerini belirtirken bunu yapmak yaygın mıdır? Ya da onu nasıl buldun? – Hiroki

+1

https://laravel.com/docs/master/eloquent-relationships#eager-loading Yuvalanmış İstenmeyen Yükleme'ye kaydır – Cptmaxon