2016-04-10 1 views
1

Wie würde ich ein Foto für ein Produkt anzeigen, wenn es viele Fotos mit dem Produkt verbunden sind. Zum Beispiel muss ich nur 1 Foto auf der Titelseite anzeigen, und ich möchte kein Karussell machen. Hier ist, was ich bisher:Limit 1 Foto von vielen anzeigen - Laravel 5.2

My Product Images

Wie Sie sehen können, im tut ein für-jede Schleife, und es wird die Anzeige aller Bilder mit diesem Produkt verbunden sind, möchte ich nur ein Bild angezeigt werden soll.

Hier ist, wie ich die Bilder bin Anzeige:

@foreach($products->photos as $photo)     
    <img src="/store/{{ $photo->thumbnail_path }}"> 
@endforeach 

Mein Controller, um den Artikel für diese Seite anzuzeigen:

class ProductsController extends Controller { 


    /** 
    * Show all products 
    * 
    * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 
    */ 
    public function showProducts() { 
     // Get all products 
     $product = Product::all(); 

     return view('admin.product.show', compact('product')); 
    } 

} 

Mein Produkt-Modell (verkürzt):

class Product extends Model { 

    /** 
    * One Product can have many photos. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\HasMany 
    */ 
    public function photos() { 
     return $this->hasMany('App\ProductPhoto'); 
    } 

} 

Und das ist, wie ich meine Produkte Bilder Tabellen wie folgt aussehen:

My Images Table

My Products Table

Antwort

2

Ditch die @foreach und verwenden first() auf der Fotosammlung:

<img src="/store/{{ $products->photos->first()->thumbnail_path }}"> 

Wenn Sie möchten, in der Lage zu wählen welche one's featured, Sie c

public function featuredPhoto() { 
    return $this->hasOne('App\ProductPhoto')->whereFeatured(true); 
} 

und:

<img src="/store/{{ $products->featuredPhoto->thumbnail_path }}"> 
+0

Oh snapp, nette danken Ihnen einen boolean featured Spalte auf den Fotos Tisch und tun so etwas wie dieses Ould hinzuzufügen! – David

+1

@David Gern geschehen! Sie sollten auch das Laden von Fotos in Betracht ziehen (oder Ihre App erstellt eine Abfrage pro Zeile in dieser Tabelle, um die Fotos für jeden Datensatz zu suchen). '$ product = Product :: mit ('Fotos') -> get();' anstelle von '$ product = Product :: all();'. https://laravel.com/docs/5.2/eloquent-relationships#eager-loading – ceejayoz

+0

In Ordnung, das habe ich getan. Werden die Fotos dadurch schneller geladen? – David