2017-04-16 4 views
0

Ich habe folgende ModellklasseReturn Klassenvariable eines Laravel Modell in JSON

class MyModel extends Model { 
    public $some_variable; // I don't want to store this in the database 
    protected $fillable = ['column1', 'column2']; 

In der Steuerung:

$model = MyModel::find(2); 
$model->some_variable = "some value"; // Dynamically calculated each time 
return response()->json($model); 

Die Antwort alle Spalten von MyModel enthält aber nicht $some_variable enthält. Warum konnte das passieren? Sind Klassenvariablen standardmäßig vorübergehend?

Antwort

0

Datenmodell wird intern in $attributes Array gehalten, so dass Sie sie setzen es vor der Konvertierung Ihrer Daten zu JSON möchten: es

... 
$model->some_variable = ...; 
return response()->json($model); 
+0

Okay, ich werde versuchen, es zum Array $ Attribute hinzuzufügen. –

-2

Lassen Sie versuchen:

$model = MyModel::find(2); 
$model->some_variable = "some value"; 
return response()->json($model->toArray()); 
0

Weil Sie definiert haben $some_variable auf dem Modell, wird es nicht in der Array/Json-Ausgabe angezeigt. Die array/json-Ausgabe enthält nur die Tabellendaten (gespeichert in der $attributes-Eigenschaft) und die geladenen Beziehungsdaten.

Wenn dieses Feld angezeigt werden soll, können Sie die Methode toArray() für das Modell überschreiben, oder Sie können eine Zugriffsmethode erstellen und diese der Eigenschaft $appends hinzufügen.

Aufschalten toArray():

class MyModel extends Model 
{ 
    public $some_variable; 

    public function toArray() 
    { 
     $data = parent::toArray(); 
     $data['some_variable'] = $this->some_variable; 

     return $data; 
    } 
} 

einen Accessor verwenden und $appends:

class MyModel extends Model 
{ 
    public $some_variable; 

    protected $appends = ['some_variable']; 

    public function getSomeVariableAttribute() 
    { 
     return $this->some_variable; 
    } 

} 

Sie können über accessors here lesen. Sie können über appending data to json here lesen.

+0

Ich werde das versuchen und zu dir zurückkommen! Vielen Dank! –