技術系

[Laravel]便利メソッド-pluckとvalue-

技術系

Laravel便利メソッド第2弾!
今回は「pluck」と「value」を使っていきます!

前回同様、クエリビルダを使用する際の便利メソッドです!

pluckくん

pluckは必要なカラムのデータだけ取り出せるメソッドです!
見た方が分かりやすいので実演します。

Userテーブルからユーザーデータを取り出し、名前のみ表示していきたいとします。

$users = User::all()
return view('welcome2', ['users' => $users]);
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    @foreach ($users as $user)
        <p> {{ $user->name }}</p>
    @endforeach
</body>
</html>

▽表示結果

今まではこう書いていました。

悪いわけではないのですが、
現在の$userにはidなどの別の情報も入ってる状態になり、ちょっとスマートではないです。

事前に「名前のみを格納した配列」を作成しておいた方がスマートです。
そういった場合にpluckを使用します。

$users_name = User::all()->pluck('name');
return view('welcome2', ['users_name' => $users_name]);

pluckで「name」のカラムだけ取り出しました。
$userNameの中身を見てみると…

余計なidなどの情報はなく、nameの情報のみの配列が返ってきています。
これをforeachで表示してあげれば完成です。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    @foreach ($users_name as $users_name)
        <p> {{ $user_name }}</p>
    @endforeach
</body>
</html>

▽表示結果

こちらの方がちょっとスマートですね。
SQLでいう「SELECT “name” FROM “users”」です。

ちなみに、idをキー、nameをバリューとした配列にすることもできます。

pluckは第二引数を取ることができ、
pluck(valueにしたい値, keyにしたい値)という仕組みになっていますので、

$users_name = User::all()->pluck('name', 'id');
return view('welcome2', ['users_name' => $users_name]);

このように書けば、keyにid、valueにnameの配列を作成することができます。
これをこんな感じで表示してあげると…

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    @foreach ($users as $user_id => $user_name)
        <p> {{ $user_id }}</p>
        <p> {{ $user_name }}</p>
    @endforeach
</body>

</html>

▽結果表示

何かスマートですね。何か。
SQLでいう「SELECT “name, email” FROM “users”」です。

以上、pluckでした。

valueくん

カラムの値を1個だけ欲しいよ~って時に使います。
Userテーブルからidが1の人の名前が欲しいとします。

$user = User::find(1);
return view('welcome2', ['user' => $user]);
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <p> {{ $user->name }}</p>
</body>
</html>

もうちょっとスマートにします。

$user_name = User::value('name');
return view('welcome2', ['user_name' => $user_name]);
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <p> {{ $user_name }}</p>
</body>
</html>

Userテーブルからnameカラムのデータを一つ取り出しておき、
表示するだけにしました。

ちょっとスマートになりましたね。
SQLでいう「SELECT “name” FROM “users” LIMIT 1」です。

おわりに

今回は「pluck」「value」の紹介をしました。
こちらに便利メソッド総まとめのサイトがあるので、ぜひ参考にしてください。

Laravel、ほんと便利ですね~
バージョン変更にあたって毎回のように書き方が変わるので
正直むかついてましたが、便利に使えるように日々努力されているのでしょう。多分。

今回はここまで!
Enjoy Hacking!!

タイトルとURLをコピーしました