2017-10-22 3 views
0

Ich arbeite mit einer Blog-Website mit Laravel, wo ich viele Beiträge in Index-Seite zeige. Ich möchte auf der Indexseite 300 Zeichen Post-Body und auf der Detailseite den vollständigen Post abrufen. Ich verwende einen Accessor im Post Model, um die ersten 300 Zeichen des Post-Body zu erhalten.Wie repariere Laravel eloquent Accessor zu arbeiten in bestimmten Ort

public function getBodyAttribute($value) 

{

return substr($value, 0, 300); 

}

Es arbeitet für die Indexseite in Ordnung, aber im Detail Seite Es funktioniert auch, aber ich brauche vollständigen Beitrag Körper in der Detailseite. Ich versuche, keine rohe Abfrage zu verwenden.

Antwort

0

Aus den documentation

Zugriffs- und mu nutzen können Mit tators können Sie Eloquent-Attributwerte formatieren, wenn Sie sie in Modellinstanzen abrufen oder festlegen.

Also, was passiert, ist, dass, wenn Sie $post->body haben es immer Ihre aktuelle getBodyAttribute und geben die 300 Zeichen langen Körper laufen.

Was Sie tun müssen, ist anderer Name für Ihre Accessor

public function getBodyShortAttribute() 
{ 
    return substr($this->name, 0, 300); 
} 

Und dann bekommen Sie den neuen Wert mit $post->body_short

+0

So zu verwenden, nachdem er mit dem Accessor arbeiten, würde die Abfrage durchgeführt werden? –

+0

Accessor läuft nach der Abfrage ist, wenn Sie das meinen – ljubadr

+0

@ljubadr Keine Notwendigkeit, zwei verschiedene Funktionen zu erstellen. Es ist erreichbar mit einzelnen Funktionen. –

0

nicht notwendig

getBodyAttribute() 
{ 
    return substr($value, 0, 300); 
} 

Sollte in der Steuerung oder Ansicht für Limit-String

str_limit($value, 300, '...') 

helpers: method str limit