2016-06-24 6 views
1

Ich habe ein Modell namens Book für eine Tabelle mit dem Namen books, die ein Feld cover_image hat.Wie definiert man einen Accessor für ein vorhandenes Feld in einem Modell in Laravel 5?

Ich möchte jedoch einen Accessor für das Feld cover_image definieren, anstatt nur den Standardwert abzurufen. Diese

ist, wie ich versucht, dies zu tun:

class Book extends Model { 

    public function getCoverImageAttribute() { 

     if ($this->cover_image === null) { // Not sure how to check current value? 
       return "a.jpg" 
     } 
     return $this->cover_image; 
    } 

} 

jedoch die oben natürlich, weil nicht funktioniert $this->cover_image Aufruf wieder Rekursion verursachen würde

Wie kann ich dieses Problem beheben?

+1

Sie möchten vielleicht PHP 7 Syntax für null Zwang 'return $ this-> cover_image ?? verwenden "a.jpg" ' – Abiodun

Antwort

4

Sie müssen stattdessen für das Attribut überprüfen:

class Book extends Model { 

    public function getCoverImageAttribute() { 
     return $this->attributes['cover_image'] ?? "a.jpg"; 
    } 

} 

Diese Sie normalerweise erlaubt $book->cover_image auch zu nutzen.

Ich glaube, das folgende Beispiel wird auch funktionieren:

class Book extends Model { 

    public function getCoverImageAttribute($value) {  

     return is_null($value) ? 'a.jpg' : $value; 
    } 

} 
Verwandte Themen