Danyloff

Шаблон 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 позволяет упростить работу с базами данных и сделать ее более интуитивной. Он также позволяет уменьшить количество кода, необходимого для работы с базами данных, и улучшить читаемость кода.


Так же интересно

I из SOLID с примерами на PHP

Принцип разделения интерфейса (Interface Segregation Principle, ISP) является одним из пяти ключевых принципов объектно-ориентированного программирования в...

Оптимистическая офлайн блокировка

Оптимистическая оффлайн блокировка - это метод, который позволяет избежать конфликтов при одновременном доступе к ресурсам нескольких пользователей в оффлайн...