Laravelのpluck()で値の一覧を取得 – コレクションの活用

Laravelコレクションを使いこなす事はデータ処理を効率化することに繋がります。その中でも pluck() メソッドは大活躍します。

この記事では、Laravelを使い始めたばかりの方や、スキルアップを目指す中級者のために、pluck()の基本的な使い方から、より高度なテクニックまでをわかりやすく解説します。

データ操作の効率を上げ、プログラミングの質を向上させる方法を学びましょう。

pluck で出来る事

pluck (摘み取る) を使う事で指定したキーの値を取得できます。

$collection = collect([
    ['id' => 100, 'name' => '太郎'],
    ['id' => 200, 'name' => '二郎'],
]);
 
$plucked = $collection->pluck('name');
 
$plucked->all();
 
// ['太郎', '二郎']

pluckの実装コードはこちら

    /**
     * Get the values of a given key.
     *
     * @param  string|int|array<array-key, string>  $value
     * @param  string|null  $key
     * @return static<array-key, mixed>
     */
    public function pluck($value, $key = null)
    {
        return new static(Arr::pluck($this->items, $value, $key));
    }

https://github.com/laravel/framework/blob/fb9d508f62690dbbfc44150dd2831c4bc1412f83/src/Illuminate/Collections/Collection.php#L755-L765

第2引数にはキーにしたい値を設定できます。

$collection = collect([
    ['id' => 100, 'name' => '太郎'],
    ['id' => 200, 'name' => '二郎'],
]);

$plucked = $collection->pluck('name', 'id');
 
$plucked->all();
 
// [100 => '太郎', 200 => '二郎']

応用編

値を取り出さず、キーを振り直すこともできます。

$collection = collect([
    ['id' => 100, 'name' => '太郎'],
    ['id' => 200, 'name' => '二郎'],
]);

$plucked = $collection->pluck(null, 'id');

$plucked->all();

// [
//   100 => [
//     'id' => 100,
//     'name' => '太郎',
//   ],
//   200 => [
//     'id' => 200,
//     'name' => '二郎',
//   ],
// ]

連想配列にも対応。ドットで繋げた文字列指定か配列で可能です。

$collection = collect([
  [
    'id' => 100,
    'name' => '太郎',
    'scores' => ['国語' => 92, '数学' => 73],
  ],
  [
    'id' => 200,
    'name' => '二郎',
    'scores' => ['国語' => 89, '数学' => 47],
  ],
]);

$plucked = $collection->pluck('scores.数学', 'name');

$plucked->all();


// [
//   '太郎' => 73,
//   '二郎' => 47,
// ]

$plucked = $collection->pluck(['scores', '国語'], 'name');

$plucked->all();

// [
//   '太郎' => 92,
//   '二郎' => 89,
// ]

注意点としてはキーが同じ場合には上書きされてしまいます。

$collection = collect([
    ['bird' => '文鳥',  'color' => '白'],
    ['bird' => 'インコ', 'color' => '黄色'],
    ['bird' => '文鳥',  'color' => 'シナモン'],
    ['bird' => 'インコ', 'color' => '青'],
]);

$plucked = $collection->pluck('color', 'bird');

$plucked->all();

// [
//   '文鳥' => 'シナモン',
//   'インコ' => '青',
// ]

モデルから取得したコレクションでも可能です。pluck直接呼び出しも出来るのでこっちの方がスマートですね。

User::all()->pluck('name')->all();

// ['太郎', '二郎']

User::pluck('name')->all();

// ['太郎', '二郎']

最後に

以上、Laravelのコレクションの中での pluck() の使い方を解説しました。

お役に立ちましたら幸いです。今回もお疲れ様でした。