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",
},
...
]
データベースから取得した結果から、さらにデータを抽出したい場合など、活用できる場面は多いかと思います。
コメントする