$relation; } elseif ($many) { $relationIds = $relation.'_ids'; $data = $model->$relationIds ?: $model->relation()->get(['id'])->fetch('id')->all(); } else { $relationId = $relation.'_id'; $data = $model->$relationId; } } if (is_array($serializer)) { $class = get_class(is_object($data) ? $data : $model->$relation()->getRelated()); $serializer = $serializer[$class]; } $serializer = new $serializer($links); return $many ? $serializer->collection($data) : $serializer->resource($data); }; } public function hasOne($serializer, Closure $callback = null) { return $this->relationship($serializer, $callback); } public function hasMany($serializer, Closure $callback = null) { return $this->relationship($serializer, $callback, true); } /** * Fire an event to allow for custom links and includes. * * @param string $name * @param array $arguments * @return void */ public function __call($name, $arguments) { return event(new SerializeRelationship($this, $name), null, true); } }