mirror of
https://codeberg.org/vlw/php-mysql.git
synced 2025-09-13 16:23:42 +02:00
fix: remove where()
method for database models (#37)
This PR removes the `where()` method which I don't think is particularly useful and also very untested since I don't use it personally at all. It's also probably better to do in-model checking for table columns **before** sending it off to this library when required anyways. Reviewed-on: https://codeberg.org/vlw/php-mysql/pulls/37 Co-authored-by: vlw <victor@vlw.se> Co-committed-by: vlw <victor@vlw.se>
This commit is contained in:
parent
a536a3bec4
commit
1727247fa7
2 changed files with 0 additions and 80 deletions
11
README.md
11
README.md
|
@ -5,7 +5,6 @@ This is a simple abstraction library for MySQL DML operations.
|
|||
For example:
|
||||
```php
|
||||
MySQL->for(string $table)
|
||||
->with(?array $model)
|
||||
->where(?array ...$conditions)
|
||||
->order(?array $order_by)
|
||||
->limit(int|array|null $limit)
|
||||
|
@ -367,13 +366,3 @@ $coffee = MySQL->for("beverages")->limit(3, 2)->select(["beverage_name", "bevera
|
|||
// ...etc
|
||||
]
|
||||
```
|
||||
|
||||
----
|
||||
|
||||
# Restrict affected/returned database columns to table model
|
||||
|
||||
Chain and pass an array to `MySQL->with()` before a `select()`, `update()`, or `insert()` method to limit which columns will be returned/affected. It will use the **values** of the array so it can be either sequential or associative.
|
||||
|
||||
**This method will cause `select()`, `update()`, and `insert()` to ignore any columns that are not present in the passed table model.**
|
||||
|
||||
You can remove an already set table model by passing `null` to `MySQL->with()`
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
// Interface for MySQL_Driver with abstractions for data manipulation
|
||||
class MySQL extends mysqli {
|
||||
private string $table;
|
||||
private ?array $model = null;
|
||||
|
||||
private ?string $limit = null;
|
||||
private ?string $order_by = null;
|
||||
|
@ -55,14 +54,6 @@
|
|||
return array_map(fn($v): mixed => gettype($v) === "boolean" ? self::filter_boolean($v) : $v, $values);
|
||||
}
|
||||
|
||||
// Return value(s) that exist in $this->model
|
||||
private function in_model(string|array $columns): ?array {
|
||||
// Place string into array
|
||||
$columns = is_array($columns) ? $columns : [$columns];
|
||||
// Return columns that exist in table model
|
||||
return array_filter($columns, fn($col): string => in_array($col, $this->model));
|
||||
}
|
||||
|
||||
/*
|
||||
# Definers
|
||||
These methods are used to build an SQL query by chaining methods together.
|
||||
|
@ -80,30 +71,6 @@
|
|||
return $this;
|
||||
}
|
||||
|
||||
// Restrict query to array of column names
|
||||
public function with(?array $model = null): self {
|
||||
// Remove table model if empty
|
||||
if (!$model) {
|
||||
$this->model = null;
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Reset table model
|
||||
$this->model = [];
|
||||
|
||||
foreach ($model as $k => $v) {
|
||||
// Column values must be strings
|
||||
if (!is_string($v)) {
|
||||
throw new Exception("Key {$k} must have a value of type string");
|
||||
}
|
||||
|
||||
// Append column to model
|
||||
$this->model[] = $v;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Create a WHERE statement from filters
|
||||
public function where(?array ...$conditions): self {
|
||||
// Unset filters if null was passed
|
||||
|
@ -128,10 +95,6 @@
|
|||
|
||||
// Create SQL string and append values to array for prepared statement
|
||||
foreach ($condition as $col => $operation) {
|
||||
if ($this->model && !$this->in_model($col)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Assume we want an equals comparison if value is not an array
|
||||
if (!is_array($operation)) {
|
||||
$operation = [Operators::EQUALS->value => $operation];
|
||||
|
@ -230,11 +193,6 @@
|
|||
// Create array of columns from CSV
|
||||
$this->columns = is_array($columns) || is_null($columns) ? $columns : explode(",", $columns);
|
||||
|
||||
// Filter columns that aren't in the model if defiend
|
||||
if ($columns && $this->model) {
|
||||
$columns = $this->in_model($this->columns);
|
||||
}
|
||||
|
||||
// Create CSV from columns or default to SQL NULL as a string
|
||||
$columns_sql = $this->columns ? implode(",", $this->columns) : "NULL";
|
||||
|
||||
|
@ -257,16 +215,6 @@
|
|||
public function update(array $entity): mysqli_result|bool {
|
||||
$this->throw_if_no_table();
|
||||
|
||||
// Make constraint for table model if defined
|
||||
if ($this->model) {
|
||||
foreach (array_keys($entity) 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create CSV string with Prepared Statement abbreviations from length of fields array.
|
||||
$changes = array_map(fn($column) => "{$column} = ?", array_keys($entity));
|
||||
$changes = implode(",", $changes);
|
||||
|
@ -291,11 +239,6 @@
|
|||
public function insert(array $values): mysqli_result|bool {
|
||||
$this->throw_if_no_table();
|
||||
|
||||
// A value for each column in table model must be provided
|
||||
if ($this->model && count($values) !== count($this->model)) {
|
||||
throw new Exception("Values length does not match columns in model");
|
||||
}
|
||||
|
||||
/*
|
||||
Use array keys from $values as columns to insert if array is associative.
|
||||
Treat statement as an all-columns INSERT if the $values array is sequential.
|
||||
|
@ -317,18 +260,6 @@
|
|||
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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue