2013-07-19 29 views
6

Mülk yüklü bir senarioda neden tesise erişemiyorum?Laravel 4 Eager Yükleme "Tanımsız Özellik"

Tesisler modelimin fotoğraf konumuna erişmeye çalışıyorum. Çok var: Birçok ilişki. Ben ben ile bitirmek $facilities->photos yankı Eğer

foreach($facilities as $facility) 
{ 
    echo $facility->photos->id; 
} 

Ben Undefined property: Illuminate\Database\Eloquent\Collection::$id

olsun erişmeye çalıştığınızda

$facilities = Facility::with('photos')->get(); 

kullanarak tesis hakkında bilgi yüklediğinizde.

[{"id":"3", 
"name":null, 
"location":"facilities\/facility1.jpg\r", 
"created_at":"2013-07-18 14:15:19", 
"deleted_at":null, 
"updated_at":null, 
"pivot":{"facility_id":"5","photo_id":"3"}}] 

Bu dizinin herhangi bir özelliğine erişmenin en iyi yolu nedir? photos Bir photos koleksiyonu almak ve mesela photos topluluk içinde yineleme için gereken fotoğraf almak için yükleme istekli ile

cevap

18

foreach($facilities as $facility) 
{ 

foreach($facility->photos as $photo) 
{ 
    echo $photo->id; 
} 

} 

Eğer sadece ilk fotoğraf veritabanından alınan Ne koleksiyon

foreach($facilities as $facility) 
{ 
    $facility->photos->first()->id; 
} 
+1

'$ property-> photos() -> first() -> id;' '$ özelliği-> fotoğraflar-> ilk olmalıdır() -> id;' (fotoğraflarda parantez yok). –

+0

@ Alex-Info.net teşekkürler, düzeltildi. – Altrim

2

üzerinde first() yöntemini çağırarak bunu elde edebilirsiniz isterseniz bir nesne ile bir dizidir. Bu yüzden bir ustabaşı çalışıyor. İstediğiniz şekilde erişmek için ilk() yöntemini, Atrim'in dediği gibi eklemelisiniz, hatta get() yöntemini bile bırakabilirsiniz. Sadece kontrolörde yapmayı öneririm.

$facilities = Facility::with('photos')->first(); 

{{ $facilities->location }} 
0

Teşekkürler Altim, sadece bu soruna da vurdum ve iç içe geçmiş foreach çözümlerden biri. Yine de, sonunda kullandığım çözümü sizinle paylaşacağım.

Yuvalanmış foreach veya istekli yükleyici yerine, bir Join Query Builder kullandım. Benim durumumda:

$posts = DB::table('posts') 
       ->leftJoin('users', 'posts.user_id', '=', 'users.id') 
       ->get(); 

Bu bana bir foreach kullanmak için izin ve tüm veri gibi bir şey olurdu mesela benim durumumda, aynı düzeydedir:

@foreach ($posts as $post) 
    <p>{{ $post->first_name }}</p> # From users table 
    <p>{{ $post->title }}</p> # From posts table 
    <p>{{ $post->body }}</p> 
@endforeach 

Belki değil Bu soruyu tam olarak cevaplamak, ama umarım bu soruna son veren benim gibi başkalarına yardım eder.

+0

Birisi, sorgu oluşturucu olmadan temiz bir sol birleştirme yapmanın yolunu biliyorsa, daha labirent bir şekilde, bunu bilmek isterdim;) – AZReed