2017-02-09 3 views
0

Ich habe ein Modell (z. B. User).Erhalten Sie bestimmte Attribute von einem Eloquent-Modell beim Konvertieren zu einem Array in Laravel

Ich kann es leicht in ein Array umwandeln etwa so:

$user->toArray() 

Doch diese gibt alle Attribute. Ich möchte nur die Attribute x, y und z.

Wir können die hidden und visible Attribute des Modells verwenden/zeigen Werte zu verstecken, wie hier beschrieben: https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json

Aber ich will das nicht verwenden, weil dies eher eine einmalige Situation. Nicht regelmäßig.

Die Methode pluck ist ideal, aber dies gilt nur für Sammlungen, nicht für Modelle.

+1

können Sie [$ user-> x, $ user-> y, $ user-> z] zurückgeben oder mit lokalen Bereichen anpassen https://laravel.com/docs/5.4/eloquent#local-scopes – MarcosRJJunior

Antwort

2

Sie können die toArray()-Methode überschreiben und zulassen, dass sie ein Array der Felder übernimmt, die zurückgegeben werden sollen.

public function toArray(array $fields = []) 
{ 
    // Get the full, original array. 
    $original = parent::toArray(); 

    // If no fields are specified, return the original array. 
    // This ensures that all existing code works the same 
    // way as before. 
    if (empty($fields)) { 
     return $original; 
    } 

    // Return an array containing only those fields specified 
    // by the input parameter. 
    return array_key_intersect($original, array_flip($fields)); 
} 

Mit dieser Methode in Ihrem User-Modell außer Kraft gesetzt, können Sie nun den folgenden Code haben:

// Will return an array with all the fields. 
$full = $user->toArray(); 

// Will return an array with only x, y, and z fields. 
$partial = $user->toArray(['x', 'y', 'z']); 

NB: Da dies die Eltern toArray() Methode aufruft, wird diese überschriebene Methode noch den Respekt $hidden Attribut . Wenn also y ausgeblendet ist und Sie $user->toArray(['x', 'y', 'z']); aufrufen, enthält das resultierende Array den Wert y nicht.

Verwandte Themen