*/ 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 ( '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->relation ) ) { $vars['relation'] = $this->relation; } foreach ( $this->clauses as $key => $value ) { $vars[ $key ] = $value->toArray(); } return $vars; } }