/**
  * @param Model|Model[] $models
  * @param Context $context
  * @param null $resourceDefinition
  * @return array|\mixed[]
  */
 protected function modelsToResources($models, Context $context, $resourceDefinition = null)
 {
     if (ArrayHelper::isIterable($models)) {
         return $this->toResources($models, $context, $resourceDefinition)->toArray();
     } elseif ($models instanceof Model) {
         return $this->toResource($models, $context, $resourceDefinition)->toArray();
     } else {
         return $models;
     }
 }
 /**
  * @param ResourceDefinition|string $resourceDefinition
  * @param mixed $entities
  * @param ContextContract $context
  * @param RelationshipValue $parent
  * @param null $parentEntity
  * @return ResourceCollection
  * @throws InvalidContextAction
  * @throws InvalidEntityException
  */
 public function toResources($resourceDefinition, $entities, ContextContract $context, RelationshipValue $parent = null, $parentEntity = null) : ResourceCollection
 {
     if (!ArrayHelper::isIterable($entities)) {
         throw new InvalidEntityException(__CLASS__ . '::toResources expects an iterable object of entities.');
     }
     $resourceDefinition = ResourceDefinitionLibrary::make($resourceDefinition);
     $out = new ResourceCollection();
     foreach ($entities as $entity) {
         $out->add($this->toResource($resourceDefinition, $entity, $context, $parent, $parentEntity));
     }
     $context->getProcessors()->processCollection($this, $out, $resourceDefinition, $context, $parent, $parentEntity);
     return $out;
 }
 /**
  * @param SelectQueryParameters $query
  * @param mixed[]
  * @return mixed[]
  * @throws InvalidArgumentException
  */
 public function processResults(SelectQueryParameters $query, $results)
 {
     if (!ArrayHelper::isIterable($results)) {
         throw new InvalidArgumentException("Results should be iterable.");
     }
     if ($query->isReverse()) {
         $results = ArrayHelper::reverse($results);
     }
     // Set the first and the last values
     if (count($results) > 0) {
         $this->setFirst($results[0]);
         $this->setLast($results[count($results) - 1]);
     }
     return $results;
 }