move from old repository
This commit is contained in:
		
							
								
								
									
										49
									
								
								Conditionable.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								Conditionable.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace DatabaseHelper;
 | 
			
		||||
 | 
			
		||||
use DatabaseHelper\enums\Operator;
 | 
			
		||||
 | 
			
		||||
trait Conditionable
 | 
			
		||||
{
 | 
			
		||||
    protected array $conditions = [];
 | 
			
		||||
    protected Schema $schema;
 | 
			
		||||
 | 
			
		||||
    public function where(string $col, string|Operator $operator, mixed $val): self {
 | 
			
		||||
        return $this->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->requireColumn($col);
 | 
			
		||||
 | 
			
		||||
        // Convert the operator string to a ConditionOperator enum if needed.
 | 
			
		||||
        if (is_string($operator))
 | 
			
		||||
            $operator = Operator::fromString($operator);
 | 
			
		||||
 | 
			
		||||
        $columnType = $this->schema->columnType($col);
 | 
			
		||||
        $castedValue = $columnType->dbCast($val);
 | 
			
		||||
 | 
			
		||||
        if (!empty($this->conditions))
 | 
			
		||||
            $this->conditions[] = $prefix;
 | 
			
		||||
        $this->conditions[] = "$col " . $operator->toString() . " $castedValue";
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function isConditioned(): bool {
 | 
			
		||||
        return !empty($this->conditions);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function combineConditions(): string {
 | 
			
		||||
        if ($this->isConditioned())
 | 
			
		||||
            return implode(" ", $this->conditions);
 | 
			
		||||
        return "";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user