私のアプリケーションでは、ユーザーは他のユーザーを「お気に入り」リストに追加できます。お気に入りのユーザーに関するすべての情報は、次の構造を持つテーブルに格納されます。
user_id
favorite_id
さらに、各ユーザーには価格付きのサービスがあります。私のアプリケーションには、次の構造を持つテーブルと相互に関連するテーブルがusersあります。servicesservice_user
user_id
service_id
price
特定のユーザーのすべてのお気に入りのユーザーをサービスと価格で取得するには、次のようにします。
$user->favorites()->with('services')->get();
ただし、price結果として得られるサービスのリストの各サービス オブジェクトには列がありません (この列は にありますpivot)。
priceしたがって、ピボット テーブルではなく、各サービス オブジェクトの一部として列を取得する方法があるかどうかを知りたいです。次の質問はすでに私の問題を解決していますが、これを行わずにmap()、またはforeach()パフォーマンスを向上させる方法があるかどうかを知りたいですか?
現在、次の解決策があります。
$user->favorites()->with('services')->get()
->map(function ($favorite) {
foreach ($favorite['services'] as &$item) {
$item['price'] = $item->pivot->price;
}
return $favorite;
});