/** * @param BaseRepository $repository * @param mixed $column * @param Builder $query * @param string $search */ public function apply($repository, $column, $query, $search) { $name = $column->name(); if ($repository->hasColumn($name)) { $query->andWhere($query->getFrom() . ".{$name} LIKE '%{$search}%'"); } else { $query->andWhere("{$name} LIKE '%{$search}%'"); } }
/** * @param BaseRepository $repository * @param Builder $query * @param string $orderDirection */ public function order($repository, $query, $orderDirection) { $name = $this->name(); if ($repository->hasColumn($name)) { $query->orderBy($query->getFrom() . ".{$name} {$orderDirection}"); } else { $query->orderBy("{$name} {$orderDirection}"); } }
/** * @param BaseRepository $repository * @param Builder $query * @param string $search */ public function search($repository, $query, $search) { $name = $this->name(); if ($repository->hasColumn($name)) { $query->orWhere($query->getFrom() . ".{$name} LIKE '%{$search}%'"); } else { $query->orWhere("{$name} LIKE '%{$search}%'"); } }
/** * Set currently loaded model id * @param int $id */ public function setId($id) { if (is_null($this->id)) { $this->id = $id; $this->instance($this->repository->find($id)); } }
/** * Render async request * @return array */ public function renderAsync() { $query = $this->repository->query(); $totalCount = count($query->getQuery()->execute()); $this->applySearch($query); $this->applyColumnSearch($query); $this->modifyQuery($query); $filteredCount = count($query->getQuery()->execute()); $this->applyOrders($query); $this->applyOffset($query); $collection = $query->getQuery()->execute(); return $this->prepareDatatablesStructure($collection, $totalCount, $filteredCount); }