Skip to content
neemah edited this page Apr 18, 2011 · 18 revisions

Data Access Objects

Каждому бизнес объекту, которое реализует паттерн StraignMapping или Dictionary соответсвует DAO, который позволяет производить различные операции над бизнес объектом по отношению к базе данных.

_Тут картинка с наследованием BusinessObjectDAO <- ... <- StorableDAO <- ... <- GenericDAO _

StorableDAO

Layer, который реализует операции по сохранению и добавлению бизнес объектов в базу данных.

StorableDAO::add()

Добавление объекта в БД

<?php
$myObject =
    MyObject::create()->
        setName('John')->
        setSurname('Doe');

MyObject::dao()->add($myObject);

echo $myObject->getId();
?>

метод add() используется только для создания новых объектов, если в логике вашего приложения требуется добавить или обновить объект, нужно воспользоваться операцией take().

StorableDAO::save()

Обновление объекта в БД

<?php
$myExistingObject->setPhoneNumber('123456789');
MyExistingObject::dao()->save($myExistingObject);
?>

будьте осторожны, операция save() может перезаписать ваши данные, если параллельная сессия вашего приложения сделал эту операцию раньше над тем же объектов

StorableDAO::merge()

Обновление с проверкой на наличие изменений при параллельной работе с объектами.

Имеем объект MyObject: name: Leroy surname: Doe age: 10

Сессия 1:

<?php
$myObject = MyObject::dao()->getById(1);
$myObject->setName('John');
$myObject->setAge(11);

MyObject::dao()->merge($myObject);
?>

Сессия 2:

<?php
$myObject = MyObject::dao()->getById(1);
$myObject->setSurname('Jenkins');

MyObject::dao()->merge($myObject);
?>

В случае, если две сессии начнут работу одновременно с одним и тем же объектом, результатам будет объект с полями: name: John surname: Jenkins age: 11

StorableDAO::unite()

Clone this wiki locally