addCondition($col, $operator, $val, "AND"); } public function andWhere(string $col, string|Operator $operator, mixed $val): self { return $this->addCondition($col, $operator, $val, "AND"); } public function orWhere(string $col, string|Operator $operator, mixed $val): self { return $this->addCondition($col, $operator, $val, "OR"); } protected function addCondition(string $col, string|Operator $operator, mixed $val, string $prefix): self { $this->schema->reqCol($col); $info = $this->schema->getCol($col); // Convert the operator string to a ConditionOperator enum if needed. if (is_string($operator)) $operator = Operator::fromString($operator); $type = $info->type; $castedVal = $type->dbCast($val); if (!empty($this->conditions)) $this->conditions[] = $prefix; $this->conditions[] = "$col " . $operator->toString() . " $castedVal"; return $this; } public function isConditioned(): bool { return !empty($this->conditions); } protected function combineConditions(): string { if ($this->isConditioned()) return implode(" ", $this->conditions); return ""; } }