/** * Комплексная функция для сложного запроса с сортировкой и фильтрацией * @param int $start номер первой записи (для постраничного чтения) * @param int $limit количество записей (для постраничного чтения) * @param bool $all если false, то только опубликованные * @param array $sort поле и направление сортировки array('field' => 'поле', 'dir' => 'направление') * @param array $filter массив фильтров, получается из url array(['field' => <название поля>, 'value' => <значение>], ...), можно посмотреть в контроллере node стр. 375 getFilter($f3, $path, $model) * @param string $additional_confitions строка дополнительных условий, полученная, например, из классов сложных фильров или просто кусок запроса WHERE, который будет добавлен к основному условию через AND * @param bool $with_related_fields включать или не включать связанные по один-ко-многим поля (название и slug) * @return array результат запроса */ public function getList($start = 0, $limit = 10, $all = true, $sort = null, $filter = null, $additional_conditions = null, $with_related_fields = true) { $params = array(); $params[] = ''; $query = new DBALQuery(); $group_table = \models\UserGroup::getInstance()->getTable(); $query->select($this->table . '.*, ' . $group_table . '.name as group_name')->from($this->table)->from($group_table)->conditions([$this->table . '.group_id = ' . $group_table . '.id'])->options(array('order' => [$this->table . '.id DESC'])); if ($additional_conditions) { $query->conditions([$additional_conditions]); } $list = $query->paginate($start, $limit); $nodes = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array()); foreach ($list['subset'] as $k => $item) { $nodes['subset'][$k] = array_map('stripslashes', $item); $nodes['subset'][$k]['title'] = $this->toString($nodes['subset'][$k]); } $nodes['pages'] = $this->getPaginationPages($nodes['count'], $nodes['pos']); // \helpers\Debug::prePrintR($nodes); return $nodes; }
/** * Комплексная функция для сложного запроса с сортировкой и фильтрацией * @param int $start номер первой записи (для постраничного чтения) * @param int $limit количество записей (для постраничного чтения) * @param bool $all если false, то только опубликованные * @param array $sort поле и направление сортировки array('field' => 'поле', 'dir' => 'направление') * @param array $filter массив фильтров, получается из url array(['field' => <название поля>, 'value' => <значение>], ...), можно посмотреть в контроллере node стр. 375 getFilter($f3, $path, $model) * @param bool $with_related_fields включать или не включать связанные по один-ко-многим поля (название и slug) * @return array результат запроса */ public function getList($start = 0, $limit = 10, $all = true, $sort = null, $filter = null, $with_related_fields = true) { $params = array(); $params[] = ''; $query = new DBALQuery(); $query->select($this->table . '.*')->from($this->table); $list = $query->paginate($start, $limit); $nodes = array('pos' => $list['pos'], 'count' => $list['count'], 'subset' => array()); foreach ($list['subset'] as $k => $item) { $nodes['subset'][$k] = array_map('stripslashes', $item); } $nodes['pages'] = $this->getPaginationPages($nodes['count'], $nodes['pos']); // \helpers\Debug::prePrintR($nodes); return $nodes; }