ajout des conditions where in et where between

This commit is contained in:
2023-10-29 18:37:35 +01:00
parent dad85948e5
commit 68de5a7d96
4 changed files with 52 additions and 2 deletions

View File

@@ -17,6 +17,14 @@ class Expression
public function raw(): string public function raw(): string
{ {
$operator = trim(strtolower($this->operator));
if ($operator == "in") {
$values = implode(",", str_split(str_repeat("?", count($this->value))));
return "(" . $this->condition . " " . $this->operator . " (" . $values . ") )";
}
if ($operator == "between" && count($this->value) == 2) {
return "(" . $this->condition . " " . $this->operator . " ? AND ? )";
}
return "(" . $this->condition . " " . $this->operator . " ? )"; return "(" . $this->condition . " " . $this->operator . " ? )";
} }

View File

@@ -15,9 +15,12 @@ class Query
public function addData($value) public function addData($value)
{ {
if (is_array($value)) {
$this->data = array_merge($this->data, $value);
} else {
$this->data[] = $value; $this->data[] = $value;
} }
}
public function getQuery(): string public function getQuery(): string
{ {

View File

@@ -86,6 +86,18 @@ class QueryBuilder
return $this; return $this;
} }
public function whereIn($condition, array $values)
{
$this->wheres[] = new Expression($condition, "in", $values);
return $this;
}
public function whereBetween($condition, $value1, $value2)
{
$this->wheres[] = new Expression($condition, "between", [$value1,$value2]);
return $this;
}
public function where($condition, $operator, $value = null) public function where($condition, $operator, $value = null)
{ {
if ($value === null) { if ($value === null) {

View File

@@ -111,3 +111,30 @@ test("event", function() {
expect($ret)->toBeObject(); expect($ret)->toBeObject();
}); });
test("where array", function() {
$row3 = new Model();
$row3->setTable("test");
$row3->col1 = "test3";
$row3->date1 = new \DateTime();
$ret3 = $row3->save();
$qb = new QueryBuilder("test");
$all = $qb->get();
expect(count($all))->toBe(3);
$qb->reset();
$between = $qb->whereBetween("id",2,3)->get();
expect(count($between))->toBe(2);
expect($between[0]->id)->toBe(2);
$qb->reset();
$in = $qb->whereIn("id",[2,3])->get();
expect(count($in))->toBe(2);
expect($in[0]->id)->toBe(2);
});