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?
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.
Essaye ça:
$lesson->users()->select('id', 'name')->get()->toArray();
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();
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.
$result = $lesson->users()->map(function($item){
return array('id' => $item->id, 'name' => $item->name)
});
Devrait faire l'affaire.