One of the routes I’m making for my API in laravel requires me to pass a variable to a ->each() function.
This can be seen below:
public function by_location($zone_id)
{
    $zone = Zone::where('id', $zone_id)->get()[0];
    error_log($zone->id);
    $exhibitors = Exhibitor::where('zone_id', $zone_id)->get();
    $exhibitors->each(function($exhibitor, $zone)
    {
        error_log($zone->id);
        $exhibitor['zone_info'] = $zone;
    });
    return response()->json($exhibitors);
}
This first error_log outputs ‘2’, but with the second I get ‘Trying to get property ‘id’ of non-object’.
Any help is apprecited!
Advertisement
Answer
You probably want to use $zone which you selected from database on first line.
Also if you want to change value of item you are iterating you have to use ->map() instead of ->each()
I changed ->get()[0] to ->first(). Never use ->get()[0]
public function by_location($zone_id)
{
    $zone = Zone::where('id', $zone_id)->first();
    error_log($zone->id);
    $exhibitors = Exhibitor::where('zone_id', $zone_id)->get();
    $exhibitors->map(function($exhibitor) use ($zone){
        error_log($zone->id);
        $exhibitor['zone_info'] = $zone;
        return $exhibitor;
    });
    return response()->json($exhibitors);
}