2016-06-08 19 views
0

Ohne Zeit zu verlieren.Laravel Blade-Vorlage - kann nicht in Beziehung zu bekommen, aber ich weiß, es ist von db gezogen und existiert

Ich habe Beziehungen

class Product extends Model 
{ 
    public function images() { 
      return $this->morphMany('App\Models\Image', 'imageable')->limit(1); 
    } 
} 

und Bildmodell

class Image extends Model 
{ 
    protected $appends = ['path', 'small', 'orginal', 'default']; 

    // ATTRIBUTES 
    public function getPathAttribute() { 
     return "uploaded/{$this->id}/"; 
    } 

    public function getOrginalAttribute() { 
     return $this->path.'orginal.jpg'; 
    } 

    public function getDefaultAttribute() { 
     return $this->path.'default.jpg'; 
    } 

    public function getSmallAttribute() { 
     return $this->path.'small.jpg'; 
    } 

    // RELATIONSHIPS 
    public function imageable() { 
     return $this->morphTo(); 
    } 

} 

und im Hinblick i

$advert->images->first()->path 

aber im immer Fehler zu machen versuchte:

Trying to get property of non-object 
jedoch

, wenn ich diese Zeile dd(), gibt es uploaded/5/ Früher hatte ich morphOne() statt morphMany(), aber der einzige Weg, es zu funktionieren scheint, ist es so, dass in foreach Schleife zu setzen.

@foreach($advert->images as $image) 
     <img src="{{ asset($image->small) }}"> 
    @endforeach 

jetzt funktioniert es, aber wenn ich ohne foreach Schleife in Bilder zu bekommen, sagt es der obige Fehler.

Um Fragen über eifrige Last zu vermeiden, habe ich es getan. Irgendwelche Hilfe?

+0

hast du '$ advert-> images-> first()' versucht und was ist die Rückkehr. Der Fehler zeigt, dass Sie keine Eigenschaft von diesem Objekt haben. $ advert-> images-> first() ' – martiendt

+0

das ist die ganze Magie im Versuch herauszufinden. 'first()' gibt das Image Model Objekt zurück !!! aber wenn ich darauf zugreife sagt es den obigen Fehler. Wenn ich ein Objekt hake, zeigt es mir '{" id ": 6," user_id ": 1," imagable_id ": 26," imageable_type ":" App \\ Models \\ Werbung "," created_at ":" 2016-06- 08 03:31:10 "," updated_at ":" 2016-06-08 03:31:10 "," Pfad ":" uploaded \/6 \/"," small ":" uploaded \/6 \/small .jpg "," orginal ":" uploaded \/6 \ /orginal.jpg "," Standard ":" uploaded \/6 \ /default.jpg "}'. Jetzt habe ich versucht, mit Array-Notation zu propery zu kommen und es funktioniert, scheint nur zu bekommen, wie ein Objekt das Skript bricht. Ich benutze Paginator BTW. –

+0

so zusammenfassend: diese '$ advert-> images-> first()' funktioniert, diese '$ adverts-> first() -> images-> first() -> small' vor der Anzeigenschleife funktioniert auch, aber innerhalb der 'adverts' loop nur diese Arbeit' $ advert-> images-> first() ['small'] 'und' @foreach ($ advert-> images as $ image) @ endforeach' Ich denke, es könnte etwas falsch mit Laravel sein, kann nichts anderes herausfinden. –

Antwort

0

Ok. Entschuldigung für das Chaos.

Sah aus wie die letzte $advert hatte keine Bilder, und ich versuchte, in sie zu bekommen, aber sie existierten nicht, so dass der Laravel Fehler geworfen, dass ich versuchte, auf nicht vorhandene Eigenschaft zuzugreifen.

so dass die ganze Lösung für sie war if

@if ($advert->images) 
     <img src="{{ asset($advert->images->small) }}"> 
    @endif 

dumme Fehler zu schreiben, aber es hat mich mehr als Stunde. hoffe es spart jemand zeit.