Active Record без Yii

05.09.2012

http://www.phpactiverecord.org

Недавно в интернете наткнулся на сайт http://www.phpactiverecord.org/ - сайт AR-библиотеки. Решил мимо не проходить, т.к. во-первых, мне очень нравится и кажется удобным сам паттерн AR и во-вторых, иногда не хочется делать простой проект на yii, но нужно использовать БД, вот как раз просто подключаем эту библиотеку и пользуемся всеми прелестями AR. Ещё в планах использовать эту библиотеку внутри модуля Drupal, ну или для перевода сайта с yii на drupal или наоборот.

01. Инициализация

Давайте попробуем использовать эту библиотеку на практике.

Качаем стабильную версию с сайта и распаковываем в папку libs нашего, пока пустого, проекта. Также в корне создадим файл index.php и папку для наших моделей – models.

Директория проекта

Создадим новую БД php_ar для тестов  и таблицу user:

Структура таблицы User

02. Тестирование

Создаем подключение к БД и модель

Инициализируем подключение в index.php:

require_once 'libs/php-activerecord/ActiveRecord.php';
ActiveRecord\Config::initialize(function ($cfg) {
    $cfg->set_model_directory('models');
    $cfg->set_connections(array(
        'development' => 'mysql://root:@localhost/php_ar'));
});

Тут должно быть всё понятно – подключаем библиотеку  и указываем БД.

Теперь создадим в папке models файл User.php – нашу модель для таблицы:

class User extends ActiveRecord\Model {
    public static $primary_key = 'id';
    public static $table_name = 'user';
    public static $connection = 'development';

    public function before_create() {
        $this->created_date = date('Y-m-d H:i:s', strtotime('now'));
    }
}

Первые 3 определения переменных обязательны если:

  1. Поле для первичного ключа не id;
  2. Имя таблицы отличается от имени класса;
  3. У нас несколько подключений к БД и мы хотим использовать определенное.

Далее идет функция before_create, в которой мы задаем значение времени. Кроме неё так же есть before_update и т.п.

Простейший CRUD

Создаем запись в таблице(дописываем в index.php):

$user = new User();
$user->first_name = 'John';
$user->last_name = 'Doe';
$user->save();

Выберем что у нас получилось:

$userList = User::find('all');
var_dump($userList);

Обновляем в браузере index.php и смотрим дамп массива пользователей.

Теперь давайте обновим запись с id=3:

$user = User::find(3);
$user->first_name = 'David';
$user->last_name = 'Black';
$user->save();

Осталось рассмотреть удаление записи с id=4:

$user = User::find(4);
$user->delete();

03. Дополнение

Кроме всего прочего поддерживается массовое удаление или обновление, выборка по условию и работа со связанными таблицами, валидация.

Интересная фишка из RoR - динамический поиск (по полям таблицы):

Author::find_by_name('George Bush');

Об этом лучше прочитать в wiki:

http://www.phpactiverecord.org/projects/main/wiki

Ещё нашел интересную статью об этом на русском:

http://www.internet-technologies.ru/articles/article_1505.html

Похожие статьи:

blog comments powered by Disqus
Наверх