Larabros\Elogram\Http\Response::merge PHP Method

merge() public method

Merges the contents of this response with $response and returns a new :php:class:Response instance.
public merge ( Response $response ) : Response
$response Response
return Response
    public function merge(Response $response)
    {
        $meta = $response->getRaw('meta');
        $data = $response->get();
        $pagination = $response->hasPages() ? $response->getRaw('pagination') : [];
        $old = $this->get();
        if ($this->isCollection($old) && $this->isCollection($data)) {
            $old = !$old instanceof Collection ?: $old->toArray();
            $new = !$data instanceof Collection ?: $data->toArray();
            return new Response($meta, array_merge($old, $new), $pagination);
        }
        if ($this->isRecord($old) && $this->isRecord($data)) {
            return new Response($meta, [$old, $data], $pagination);
        }
        throw new IncompatibleResponseException('The response contents cannot be merged');
    }

Usage Example

Example #1
0
 /**
  * {@inheritDoc}
  */
 public function paginate(Response $response, $limit = null)
 {
     // If there's nothing to paginate, return response as-is
     if (!$response->hasPages() || $limit === 0) {
         return $response;
     }
     $next = $this->request('GET', $response->nextUrl());
     $merged = $response->merge($next);
     // If ``$limit`` is not set then call itself indefinitely
     if ($limit === null) {
         return $this->paginate($merged);
     }
     // If ``$limit`` is set, call itself while decrementing it each time
     $limit--;
     return $this->paginate($merged, $limit);
 }