2016-06-30 21 views
0

Ich habe einen Controller, der eine Abfrage wie diese hat:ein berechnetes Feld Abfrage Laravel Modell hinzufügen

$post = Post::find($id); 
$comments = $post->comments; 

Wo ein Post viele Kommentare und ein Kommentar gehört zu einem Beitrag hat. Das Kommentarmodell hat ein ID-, Kommentar-, Tag-Feld.

Was ich tun möchte, ist, dass für jede Abfrage wie diese das Modell die Felder id, comment, tag und tag_translated zurückgibt, wobei letzteres nur eine Übersetzung des Tags unter Verwendung der Lang-Fassade ist.

Ich könnte das lösen, indem ich eine für den Controller verwende, der über die $ -Kommentare iteriert und das Feld hinzufügt, aber ich muss das für jeden Controller tun, der das tag_translared-Feld benötigt. Gibt es eine Möglichkeit, das Modell um ein solches Feld zu bitten?

+1

http://stackoverflow.com/questions/17232714/add-a-custom-attribute-to-a-laravel-eloquent-model-on-load sehen diese –

Antwort

4

Fügen Sie diese in Ihrem Comment Modell:

protected $appends = ['tag_translated']; 

public function getTagTranslatedAttribute() 
{ 
    return 'the translated tag'; 
} 

Hoffnung, das hilft.

3

Ja, gibt es? nur fügen Sie diese zu Ihrer Comment Modell

public function getTagTranslatedAttribute() 
{ 
    return Lang::methodYouWish($this->tag); 
} 

dann können Sie diese Eigenschaft zugreifen Kommentar Instanz

$comment->tag_translated; 

EDIT

Sie Ihre toArray Methode ändern können, fügen Sie einfach es zu Comment Klasse

protected $appends = ['tag_translated']; 

und dann

$comment->toArray(); 
+0

Dank ! Dies ruft nur dieses Attribut ab, Id möchte es an das Ergebnis anhängen, das erhalten wird, wenn es über sein Elternmodell wie in $ post-> comments aufgerufen wird. Dann möchte ich etwas wie ID, Kommentar, Tag, translated_tag ​​abrufen. – Jonathan

+0

Es funktionierte wie ein Zauber – brunoramonalmeida

Verwandte Themen