У меня есть класс PHP, экземплярами которого являются строки в моей таблице базы данных. У класса есть методы, которые позволяют создавать, читать, обновлять и удалять строки, соответствующие данному экземпляру класса. Он работает хорошо, как есть, но я в настоящее время явно называю каждый из столбцов базы данных в моем коде. В результате, когда я добавляю или удаляю столбцы (время от времени, но не редко), я должен обновить класс, включив в него имена столбцов. Я хотел бы абстрагировать мой код, чтобы он сначала запрашивал базу данных, чтобы определить, какие столбцы нужно заполнить. (Кстати, я работаю с PHP 7.2)
Код ниже - это то, что у меня сейчас есть, но я не знаю, как его абстрагировать, чтобы он не был привязан к конкретному названию каждого столбца.
<?php
class Example extends DatabaseObject {
static protected $table_name = "data";
static protected $db_columns = ['id','column1', 'column2', 'column3', 'column4'];
public $id;
public $column1;
public $column2;
public $column3;
public $column4;
public function __construct($args=[]) {
$this->column1 = $args['column1'] ?? '';
$this->column2 = $args['column2'] ?? '';
$this->column3 = $args['column3'] ?? '';
$this->column4 = $args['column4'] ?? '';
}
public function attributes() {
$attributes = [];
foreach (static::$db_columns as $column) {
if ($column === "id") { continue; }
$attributes[$column] = $this->$column;
}
return $attributes;
}
public function save() {
// calls private methods to validate, sanitize, then create or update, acc. to context
// to create, it preps an sql statement based on a call to attributes()
}
}
?>