model = $model; } /** * @inheritdoc */ public function find($id) { if (method_exists($this->model, 'translations')) { return $this->model->with('translations')->find($id); } return $this->model->find($id); } /** * @inheritdoc */ public function all() { if (method_exists($this->model, 'translations')) { return $this->model->with('translations')->orderBy('created_at', 'DESC')->get(); } return $this->model->orderBy('created_at', 'DESC')->get(); } /** * @inheritdoc */ public function paginate($perPage = 15) { if (method_exists($this->model, 'translations')) { return $this->model->with('translations')->orderBy('created_at', 'DESC')->paginate($perPage); } return $this->model->orderBy('created_at', 'DESC')->paginate($perPage); } /** * @inheritdoc */ public function create($data) { return $this->model->create($data); } /** * @inheritdoc */ public function update($model, $data) { $model->update($data); return $model; } /** * @inheritdoc */ public function destroy($model) { return $model->delete(); } /** * @inheritdoc */ public function allTranslatedIn($lang) { return $this->model->whereHas('translations', function (Builder $q) use ($lang) { $q->where('locale', "$lang"); })->with('translations')->orderBy('created_at', 'DESC')->get(); } /** * @inheritdoc */ public function findBySlug($slug) { if (method_exists($this->model, 'translations')) { return $this->model->whereHas('translations', function (Builder $q) use ($slug) { $q->where('slug', $slug); })->with('translations')->first(); } return $this->model->where('slug', $slug)->first(); } /** * @inheritdoc */ public function findByAttributes(array $attributes) { $query = $this->buildQueryByAttributes($attributes); return $query->first(); } /** * @inheritdoc */ public function getByAttributes(array $attributes, $orderBy = null, $sortOrder = 'asc') { $query = $this->buildQueryByAttributes($attributes, $orderBy, $sortOrder); return $query->get(); } /** * Build Query to catch resources by an array of attributes and params * @param array $attributes * @param null|string $orderBy * @param string $sortOrder * @return \Illuminate\Database\Eloquent\Builder */ private function buildQueryByAttributes(array $attributes, $orderBy = null, $sortOrder = 'asc') { $query = $this->model->query(); if (method_exists($this->model, 'translations')) { $query = $query->with('translations'); } foreach ($attributes as $field => $value) { $query = $query->where($field, $value); } if (null !== $orderBy) { $query->orderBy($orderBy, $sortOrder); } return $query; } /** * @inheritdoc */ public function findByMany(array $ids) { $query = $this->model->query(); if (method_exists($this->model, 'translations')) { $query = $query->with('translations'); } return $query->whereIn("id", $ids)->get(); } /** * @inheritdoc */ public function clearCache() { return true; } }