WEB/システム/IT技術ブログ

Laravelでコレクション多次元データから任意のキーのみ取り出す方法

Laravelで多次元データから任意のキーのみ取り出す方法です。

例えば、ユーザテーブルから複雑なクエリビルダで以下のデータを取得したとします。

$users = User::get_fukuzatsu();
Log::debug($users);
[
	{
		"id": 1,
		"name": "山田太郎",
		"kana": "ヤマダタロウ",
		"tel": "11122223333",
		"age": 30,
		"sex": 1,
		"mail": "taro@xxxxx"
		"postcode": "1112222",
		...
	},
	{
		"id": 2,
		"name": "山田花子",
		"kana": "ヤマダハナコ",
		"tel": "44455556666",
		"age": 25,
		"sex": 2,
		"mail": "hanako@xxxxx"
		"postcode": "4445555",
		...
	},
	...
]

このデータの電話番号など一部データを、APIで外部に展開します。ここで、以下の課題があります。

  • 全てのデータを出すにはデータ量が多い
  • プライバシーポリシー的に出せない情報がある
  • だからと言って、クエリビルダが複雑な事もあり、電話番号などキーを絞ったクエリ「get_fukuzatsu2」などを複製するのもスマートじゃない


これらの理由から、既存のデータを活用し、必要なデータをキーを指定して取り出してみたいと思います。

初めに試したのは以下の処理です。

$users_tel = $users->only(['id', 'name', 'tel']);

結果は空です。
多次元データなので、各データに対して処理する必要があるようです。そこでmapを使って繰り返し処理します。

$users_tel = $users->map(function($row){
		return $row->only(['id', 'name', 'tel']);
	});

意図する結果を取得する事ができました。

[
	{
		"id": 1,
		"name": "山田太郎",
		"tel": "11122223333",
	},
	{
		"id": 2,
		"name": "山田花子",
		"tel": "44455556666",
	},
	...
]

データベースから取得した結果から、さらにデータを抽出したい場合など、活用できる場面は多いかと思います。

B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives