| | |
| | | } |
| | | |
| | | /** |
| | | * Set LIMIT |
| | | * Set pagination |
| | | * |
| | | * @param int $limit Number of records |
| | | * @param int $offset Optional offset |
| | | * @param int $perPage Number of records per page |
| | | * @param int $page Page number (1-based) |
| | | * @return self |
| | | */ |
| | | public function limit(int $limit, int $offset = 0): self |
| | | public function limit(int $perPage, int $page = 1): self |
| | | { |
| | | $this->builder['limit'] = $limit; |
| | | $this->builder['offset'] = $offset; |
| | | $this->builder['per_page'] = $perPage; |
| | | $this->builder['page'] = $page; |
| | | return $this; |
| | | } |
| | | |
| | |
| | | * 'where' => ['user_id' => 1], |
| | | * 'orderby' => 'date_added', |
| | | * 'order' => 'DESC', |
| | | * 'limit' => 20 |
| | | * 'per_page' => 20 |
| | | * ]); |
| | | */ |
| | | public function getMany(array $args = [], string $output = OBJECT): array |
| | | public function getMany(array $args = [], bool $itemsOnly = true, string $output = OBJECT): array |
| | | { |
| | | return $this->cache->remember( |
| | | $items = $this->cache->remember( |
| | | $this->cache->generateKey(array_merge($args, ['output' => $output])), |
| | | function () use ($args, $output) { |
| | | $query = "SELECT * FROM {$this->fullTableName}"; |
| | |
| | | } |
| | | |
| | | // LIMIT |
| | | if (!empty($args['limit'])) { |
| | | $limit = absint($args['limit']); |
| | | $offset = !empty($args['offset']) ? absint($args['offset']) : 0; |
| | | $query .= " LIMIT {$offset}, {$limit}"; |
| | | if (array_key_exists('limit', $args)) { |
| | | error_log('[CustomTable]::getMany deprecated key \'limit\' - use \'per_page\' instead. '.print_r($args, true)); |
| | | $args['per_page'] = $args['limit']; |
| | | } |
| | | if (array_key_exists('offset', $args)) { |
| | | error_log('[CustomTable]::getMany deprecated key \'offset\' - use \'page\' instead. '.print_r($args, true)); |
| | | $args['page'] = $args['offset'] / $args['limit']; |
| | | } |
| | | if (!empty($args['per_page'])) { |
| | | $perPage = absint($args['per_page']); |
| | | $page = !empty($args['page']) ? absint($args['page']) : 1; |
| | | $offset = ($page - 1) * $perPage; |
| | | $query .= " LIMIT {$offset}, {$perPage}"; |
| | | } |
| | | |
| | | if (empty($values)) { |
| | |
| | | } |
| | | ); |
| | | |
| | | if ($itemsOnly) { |
| | | return $items; |
| | | } |
| | | $page = max(1, $args['page'] ?? 1); |
| | | $perPage = $args['per_page']??false; |
| | | $total = $this->count($args['where']); |
| | | return [ |
| | | 'items' => $items, |
| | | 'total' => $total, |
| | | 'has_more' => $perPage && ($page * $perPage) < $total, |
| | | ]; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Get a specific column value from all matches |
| | |
| | | $args['order'] = $order; |
| | | } |
| | | if ($limit) { |
| | | $args['limit'] = $limit; |
| | | $args['per_page'] = $limit; |
| | | } |
| | | |
| | | return array_column($this->getMany($args), $column); |