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


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

Шаблон «Антикоррупционный слой»

Реализуйте слой фасада или адаптера между различными подсистемами, которые не разделяют одинаковую семантику. Этот слой переводит запросы, которые одна...

Value Object по Эвансу

Value Object - это один из ключевых концептов в DDD, который представляет собой объект, который описывает некоторое значение или состояние, но не имеет...