web-dev-qa-db-fra.com

Laravel 5.2 pluck () attributs multiples de Eloquent Model Collection

Laravel 5.2 a de jolis Nice Helpers, je voudrais les utiliser pour faire ce qui suit:

J'ai Eloquent Model Collection:

$lesson->users(); // returns Eloquent collection of 3 users

La fonction pluck() serait utile, mais elle ne peut contenir qu'un seul paramètre. Cependant, je veux obtenir une sortie avec deux paramètres , id et name, comme ceci:

[
1=>['id'=>10,'name'=>'Michael Dook'],
2=>['id'=>16,'name'=>'Henry Babcock'],
3=>['id'=>19,'name'=>'Joe Nedd']
]

Y a-t-il une solution élégante pour cela?

14
Fusion

Je sais que ce n'est pas la question la plus récente, mais au cas où quelqu'un tomberait sur Google plus tard, consultez la méthode Collection uniquement

$lesson->users()->only("id", "name")->toArray(); devrait être ce que vous recherchez.

24
Blake

Essaye ça:

$lesson->users()->select('id', 'name')->get()->toArray();
6
Abhishek

Au cas où quelqu'un voudrait "plumer" plusieurs attributs et les entrer (le résultat de l'exemple est saisi par le champ "nom", "valeur" est l'élément lui-même - changez-le pour obtenir le tableau d'attributs qui vous intéresse)

$settings = \App\Setting::all()->map(function ($setting) {
    return ['key' => $setting->name, 'value' => $setting];
})->pluck('value', 'key')->toArray();
2
bruddha

La fonction d’aide pluck () prend un deuxième paramètre. Il retournera alors un tableau associatif, où le second paramètre définit la clé. Donc, vous obtiendrez un résultat de key => value paires.

Comme vous savez que vos entrées seront composées d'un identifiant et d'un nom, cela pourrait peut-être vous aider:

$lesson->users->pluck('name', 'id')->toArray();

Cela retournera:

[
   10 => 'Michael Dook',
   16 => 'Henry Babcock',
   19 => 'Joe Nedd'
]

Je ne suis pas sûr de Laravel 5.2, mais cela fonctionne dans Laravel 5.5.

1
Corben
$result = $lesson->users()->map(function($item){ 
  return array('id' => $item->id, 'name' => $item->name)
});

Devrait faire l'affaire.

0
Mark