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