database; } /** * Get retrieved table name. * @return string Selected table name. */ public function getTableName(): string { return $this->table; } /** * Reset selected columns. * @return $this */ public function resetSelect(): static { $this->selected = []; return $this; } /** * Add selected columns. * @param string|Raw ...$selectedColumns Selected columns. * @return $this */ public function select(string|Raw ...$selectedColumns): static { // Append SELECTed columns. array_push($this->selected, ...$selectedColumns); return $this; } /** * Add raw selected SQL. * @param string ...$rawSelect Raw selected SQL. * @return $this */ public function selectRaw(string ...$rawSelect): static { // Append raw SQL SELECT. array_push($this->selected, ...array_map(fn (string $rawSql) => new Raw($rawSql), $rawSelect)); return $this; } /** * Set the new limit of results. * @param int|null $limit Limit of retrieved results. NULL to remove the limit. * @return $this */ public function limit(?int $limit): static { $this->limit = $limit; return $this; } /** * Build SELECT query. * @return Raw SQL and its bindings. * @throws MissingConditionValueException */ public function build(): Raw { // Build SELECT query and return its result. return $this->database->getQueriesAdapter()->buildSelect($this->table, // Select all columns by default. empty($this->selected) ? [new Raw("*")] : $this->selected, $this->joins, $this->wheres, $this->limit, ); } /** * Execute SELECT query. * @return object[] SELECT query result. * @throws MissingConditionValueException */ public function execute(): array { // Execute built query and return result. return $this->database->getQueriesAdapter()->select($this->table, // Select all columns by default. empty($this->selected) ? [new Raw("*")] : $this->selected, $this->joins, $this->wheres, $this->limit, ); } }