From 98ed26a3756fa9dcab5f86606d4974c484b71e74 Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Wed, 14 Feb 2024 11:01:03 +0000 Subject: [PATCH] feat: add executor method for DELETE statements (#34) * feat: add executor for DELETE statements * feat(doc): add DELETE executor ref to README --- README.md | 31 ++++++++++++++++++++++++++++++- src/MySQL.php | 23 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fc121e9..713f78b 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Statement|Method `SELECT`|[`select()`](#select) `UPDATE`|[`update()`](#update) `INSERT`|[`insert()`](#insert) +`DELETE`|[`delete()`](#delete) `WHERE`|[`where()`](#where) `ORDER BY`|[`order()`](#order-by) `LIMIT`|[`limit()`](#limit) @@ -139,6 +140,34 @@ MySQL->for("beverages")->insert([ true ``` +# DELETE + +Use `MySQL->delete()` to remove a row or rows from the a database table. + +```php +MySQL->delete( + array ...$conditions +): mysqli_result|bool +// Returns true if at least one row was deleted +``` + +This method takes at least one [`MySQL->where()`](#where)-syntaxed argument to determine which row or rows to delete. Refer to the [`MySQL->where()`](#where) section for more information. + +#### Example + +```php +MySQL->for("beverages")->insert([ + null, + "coffee", + "latte", + 10 +]); +// INSERT INTO beverages VALUES (null, "coffee", "latte", 10); +``` +``` +true +``` + # UPDATE Modify existing rows with `MySQL->update()` @@ -164,7 +193,7 @@ In most cases you probably want to UPDATE against a constaint. Chain a [`where() # WHERE -Filter a `select()` or `update()` method by chaining the `MySQL->where()` method anywhere before it. +Filter a `select()` or `update()` method by chaining the `MySQL->where()` method anywhere before it. The `MySQL->delete()` executor method also uses the same syntax for its arguments. ```php MySQL->where( diff --git a/src/MySQL.php b/src/MySQL.php index 6cba7b1..9e72069 100644 --- a/src/MySQL.php +++ b/src/MySQL.php @@ -296,6 +296,29 @@ return $this->execute_query($sql, self::to_list_array($values)); } + // Create Prepared Statemente for DELETE with WHERE condition(s) + public function delete(array ...$conditions): mysqli_result|bool { + $this->throw_if_no_table(); + + // Make constraint for table model if defined + if ($this->model) { + foreach ($conditions as $condition) { + foreach (array_keys($condition) as $col) { + // Throw if column in entity does not exist in defiend table model + if (!in_array($col, $this->model)) { + throw new Exception("Column key '{$col}' does not exist in table model"); + } + } + } + } + + // Set DELETE WHERE conditions from arguments + $this->where(...$conditions); + + $sql = "DELETE FROM {$this->table} WHERE {$this->filter_sql}"; + return $this->execute_query($sql, self::to_list_array($this->filter_values)); + } + // Execute SQL query with optional prepared statement and return mysqli_result public function exec(string $sql, mixed $params = null): mysqli_result { return $this->execute_query($sql, self::to_list_array($params));