', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. * * Default '='. * * @phpstan-var Values::DATE_QUERY_COMPARE_* */ public string $compare; /** * The MySQL keyword used to join the clauses of the query. Accepts 'AND' or 'OR'. * * Default 'AND'. * * @phpstan-var Values::DATE_QUERY_RELATION_* */ public string $relation; /** * @var array */ public array $clauses; /** * @param mixed[] $clauses * @return static */ final public static function fromArray( array $clauses ) : self { $class = new static(); foreach ( $clauses as $key => $value ) { if ( 'column' === $key ) { $class->column = $value; } elseif ( 'compare' === $key ) { $class->compare = $value; } elseif ( 'relation' === $key ) { $class->relation = $value; } else { $class->addClause( Clause::fromArray( $value ) ); } } return $class; } final public function addClause( Clause $clause ) : void { $this->clauses[] = $clause; } /** * @return ?array */ final public function toArray() :? array { if ( ! isset( $this->clauses ) || count( $this->clauses ) === 0 ) { return null; } $vars = []; if ( isset( $this->column ) ) { $vars['column'] = $this->column; } if ( isset( $this->compare ) ) { $vars['compare'] = $this->compare; } if ( isset( $this->relation ) ) { $vars['relation'] = $this->relation; } foreach ( $this->clauses as $key => $value ) { $vars[ $key ] = $value->toArray(); } return $vars; } }