3
1

Laravelのpluckは便利ですよって話

Posted at

はじめに

Laravelで開発していると必ずと言っていいほど出てくるpluckですが、Collection型配列を整頓するだけではない魅力も感じたので記事に起こそうと思いました。

状況に次第ではありますが実はEloquentで使用するとselect関数が必要なくなるんです

基本機能

Readoubleからそのまま引用してしまいますが、基本的な機能としては、

指定したキーのコレクション値を取得します

第1引数にvalueを、第2引数にはkeyを入れます

第1引数のみであれば、valueだけを

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$plucked = $collection->pluck('name');

$plucked->all();

// ['Desk', 'Chair']

さらに、コレクションのキー項目も指定し、指定したキーの値だけを取得することもできます

$collection = collect([
    ['product_id' => 'prod-100', 'name' => 'Desk'],
    ['product_id' => 'prod-200', 'name' => 'Chair'],
]);

$plucked = $collection->pluck('name');

$plucked->all();

// ['Desk', 'Chair']

Readoubleでは続きが書かれていますが、本記事ではここまでにしておきます。続きは参考文献からご覧ください。

Eloquentで取得したデータに対してキーを絞る

例えば下記のようなテーブルがあり、usersテーブルとして、

  • id (ユーザーのID)
  • name (ユーザーの名前)
  • email (ユーザーのメールアドレス)
  • created_at(ユーザーの作成日時)
  • updated_at (ユーザーの更新日時)

このテーブルに対して、Eloquentを使用して特定のカラムデータを取得するpluckの使用例をいくつか出してみます

例1 名前のリストを取得

$names = User::pluck('name');
// ['Alice', 'Bob', 'Charlie']

nameカラムの値を取得し、その値のコレクションを返します。

例2 ユーザーIDをキーとして名前を取得

$names = User::pluck('name', 'id');
// [1 => 'Alice', 2 => 'Bob', 3 => 'Charlie']

ここで数字はuserのID、それに続く名前はnameカラムの値に対応している

キー(カラム)を絞るならselectでも良いのでは?

実はselectでも同じようなことができます

$names = User::select('name', 'id')->get();
// [1 => 'Alice', 2 => 'Bob', 3 => 'Charlie']

出力結果も同じです。

じゃあなぜわざわざpluckを紹介しているんだ?と思われるかもしれませんが、よくご覧くださいpluckには ->get() が無いんですよね。

たかだか7文字やんけと思われるかもしれませんが開発しているプロダクトが大きくなるにつれてこの7文字の負債がどんどんと大きくなってストレスになります。

なのでこの場合は極力pluckを使う方が運用性が高まります

じゃあselectは要らない子?

そうとも言えません。

なぜならpluckが指定できるキーの数は2つまでと決まっているからです。

(ここにLaravelのGithubからコードを引用)

今回のUsersテーブルの3つのカラムを使いたい場合はselectを使うことになります。

$names = User::select('name', 'id', 'email')->get();
// [
// 0 => [
// 'id' => 1,
// 'name' => 'Alice',
// 'email' => 'sample@example.com'
// ],
// 1 => ...
// 2 => ...

idと名前くらいなら pluck でOKになります。

コーディングスタイルや設計に合わせて使い分けましょう!

終わりに

pluckselectでは結果が同じなのでselectのみを使用していましたが、記述量が減ることからpluckを愛用するようになりました。
稀に知らない関数に出会ったり知っている関数でも実は知らない機能があったりして開発が楽しくなることもありますよねぇ
新しいことを知ることで人生が豊かになります(締めで急に怪しい人になっちゃった

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1