Шаблон Active Record с примерами на PHP
- ·
-
Active Record — это шаблон проектирования, который используется для работы с базами данных. Он позволяет представлять данные в виде объектов и работать с ними, как с обычными объектами в языке программирования. Шаблон Active Record был впервые представлен в Ruby on Rails, но с тех пор он был реализован во многих других языках программирования, включая PHP.
Основная идея шаблона Active Record заключается в том, что каждая таблица в базе данных имеет соответствующий класс в языке программирования. Этот класс представляет собой модель данных, которая содержит методы для работы с этими данными. Каждый объект этого класса представляет одну запись в таблице базы данных.
Пример реализации шаблона Active Record на PHP
class User extends ActiveRecord {
protected $table = 'users';
protected $primaryKey = 'id';
}
В этом примере мы создаем класс User, который наследует класс ActiveRecord. Мы также определяем имя таблицы и первичный ключ для этого класса. Класс ActiveRecord содержит методы для работы с базой данных, такие как сохранение, удаление и поиск записей.
class ActiveRecord {
protected $table;
protected $primaryKey;
public function save() {
$fields = get_object_vars($this);
$values = array_values($fields);
$fields = array_keys($fields);
$placeholders = array_fill(0, count($fields), '?');
$sql = "INSERT INTO $this->table (" . implode(',', $fields) . ") VALUES (" . implode(',', $placeholders) . ")";
$stmt = $this->db->prepare($sql);
$stmt->execute($values);
$this->{$this->primaryKey} = $this->db->lastInsertId();
}
public function delete() {
$sql = "DELETE FROM $this->table WHERE $this->primaryKey = ?";
$stmt = $this->db->prepare($sql);
$stmt->execute([$this->{$this->primaryKey}]);
}
public static function find($id) {
$class = get_called_class();
$instance = new $class();
$sql = "SELECT * FROM $instance->table WHERE $instance->primaryKey = ?";
$stmt = $instance->db->prepare($sql);
$stmt->execute([$id]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if ($result) {
foreach ($result as $key => $value) {
$instance->{$key} = $value;
}
return $instance;
} else {
return null;
}
}
}
В этом примере мы определяем класс ActiveRecord, который содержит методы для работы с базой данных. Метод save() сохраняет текущий объект в базе данных, метод delete() удаляет текущий объект из базы данных, а метод find() находит объект по его первичному ключу.
Заключение
Шаблон Active Record позволяет упростить работу с базами данных и сделать ее более интуитивной. Он также позволяет уменьшить количество кода, необходимого для работы с базами данных, и улучшить читаемость кода.