2017-02-09 9 views
0

モデルがあります(たとえばUser)。Laravelの配列に変換するときにEloquentモデルから特定の属性を取得する

私は簡単にそうような配列に変換することができます:

$user->toArray() 

はしかし、これはすべての属性を与えます。私は属性がほしいだけですxyz。ここで説明するように

我々は、/非表示するには、show値をモデルのhiddenvisible属性を使用することができます。これは1オフ状況の詳細ですのでhttps://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json

しかし、私はこれを使用したくありません。定期的な出現ではありません。

pluckメソッドは理想的ですが、これはモデルではなくコレクションにのみ適用されます。

+1

[$ user-> x、$ user-> y、$ user-> z]を返すか、ローカルスコープでカスタマイズすることができます。https://laravel.com/docs/5.4/eloquent#local-scopes – MarcosRJJunior

答えて

2

toArray()メソッドをオーバーライドして、返すフィールドの配列を取ることができます。

// 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:これは親toArray()メソッドを呼び出すので、このオーバーライドされたメソッドは、まだ$hidden属性を尊重し、あなたのUserモデルでオーバーライドこの方法で

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)); 
} 

は、あなたが今、次のコードを持つことができます。したがって、 yを非表示にして $user->toArray(['x', 'y', 'z']);と呼び出すと、結果の配列に yという値は含まれません。

関連する問題