Ru:DAO - stev/onphp-namespace GitHub Wiki
Data Access Objects (DAO)
Каждому бизнес объекту, который реализует паттерн StraightMapping или Dictionary соответсвует Data Access Object, позволяющий производить различные операции над бизнес объектом по отношению к базе данных.
Тут картинка с наследованием BusinessObjectDAO <- ... <- StorableDAO <- ... <- GenericDAO
StorableDAO
Layer, который реализует операции по сохранению и добавлению бизнес объектов в базу данных.
StorableDAO::add(Identifiable $object)
Добавление объекта в БД (id - берется autoincrement (mysql), sequence nextval (pgsql))
<?php
$myObject =
MyObject::create()->
setName('John')->
setSurname('Doe');
MyObject::dao()->add($myObject);
echo $myObject->getId();
?>
метод add() используется только для создания новых объектов, если в логике вашего приложения требуется добавить или обновить объект, нужно воспользоваться операцией take().
для postgresql не забудьте проверить, что ObjectDAO::getSequence() возвращает правильное имя последовательности
StorableDAO::import(Identifiable $object)
Отличается от ::add() только тем, что нужно задать идентификатор явным образом.
<?php
$myObject =
MyObject::create()->
setId(33)->
setName('John')->
setSurname('Doe');
MyObject::dao()->add($myObject);
echo $myObject->getId();
?>
StorableDAO::save(Identifiable $object)
Обновление объекта в БД
<?php
$myExistingObject->setPhoneNumber('123456789');
MyExistingObject::dao()->save($myExistingObject);
?>
будьте осторожны, операция save() может перезаписать ваши данные, если параллельная сессия приложения сделала эту операцию раньше над тем же объектом
StorableDAO::take(Identifiable $object)
Добавляет или обновляет объект (через StorableDAO::merge($object, true)) в зависимости от наличия идентификатора (id) в объекте.
StorableDAO::merge(Identifiable $object, $cacheOnly = true)
Обновляет только те поля объекта, которые изменились по сравнению с предыдущей версией. Второй параметр указывает откуда брать предыдущую версию объекта - из cache (true) или базы данных (false)
StorableDAO::unite($object1, $object2)
Обновляет только те поля в $object1, которые изменились по отношению к $object2. Операция только для объектов с одинаковыми идентификаторами.