Ярослав
Новичок
Здравствуйте.
Начинаеться проект на Zend Framework + Doctrine 2 (Пока что бета).
С зендом знаком давно, а вот с доктрин только начало.
Использую модульную структуру зенда: http://framework.zend.com/manual/en/project-structure.filesystem.html
Пока структура модуля виглядит как:
Идея следующая:
+ идет запрос на контроллер
+ контроллер создает сервис
+ сервис валидирует данные, проверяет права, начинает и заканчивает транзакции
+ работает с данными (entities) через репозитарий
+ получает сущности
+ передача в шаблон
+ шаблон прекрасно выводит
На данном этапе все начинает потихоньку уже работать, просто интересует двигаюсь ли я в правильном направлении.
И еще очень важный вопрос по Doctrine2
Есть entities:
person (id, name, isActive)
email (id, address, isActive)
personEmailRel(id, personId, emaiId, isActive)
в персон есть например метод getEmails
Далее начинаю выборку емейлов
$person->getEmails()
все отлично возвращает, НО
как поставить условие чтобы возвращало только когда isActive=1?
В базе чуть более 200 таблиц и в большей половине стоит поле isActive
На данном этапе я вижу решение только как подменять репозиторий и в нем уже выставлять дополнительное условие. Но опять же если понадобяться значения isActive=0 тогда в репозитории придеться выставлять флаги чтобы игнорировать этот функционал.
Еще как вариант делать в репозиториях дополнительные методы findIsActive($id), findIsActiveBy(...)
Как лучше решить эту проблему?
Как доктрин решает это?
Заранее благодарен за советы и подсказки.
Начинаеться проект на Zend Framework + Doctrine 2 (Пока что бета).
С зендом знаком давно, а вот с доктрин только начало.
Использую модульную структуру зенда: http://framework.zend.com/manual/en/project-structure.filesystem.html
Пока структура модуля виглядит как:
Код:
<modulename>
configs/
application.ini
controllers/ <- контроллеры
helpers/
forms/ <- формы
layouts/
filters/
helpers/
scripts/
models/ <- модели (entities)
mappers/ <- маппери (entity repositories), если нужно нестандартный
services/ <- слой сервисов (http://martinfowler.com/eaaCatalog/serviceLayer.html)
views/ <- шаблоны, фильтры и т.д.
filters/
helpers/
scripts/
Bootstrap.php <- инициализация модуля (пока не использую)
+ идет запрос на контроллер
+ контроллер создает сервис
+ сервис валидирует данные, проверяет права, начинает и заканчивает транзакции
+ работает с данными (entities) через репозитарий
+ получает сущности
+ передача в шаблон
+ шаблон прекрасно выводит
На данном этапе все начинает потихоньку уже работать, просто интересует двигаюсь ли я в правильном направлении.
И еще очень важный вопрос по Doctrine2
Есть entities:
person (id, name, isActive)
email (id, address, isActive)
personEmailRel(id, personId, emaiId, isActive)
в персон есть например метод getEmails
Код:
/**
* Unidirectional - Many persons have many emails
*
* @ManyToMany(targetEntity="Address_Model_Email")
* @JoinTable(name="personEmailRel",
* joinColumns={@JoinColumn(name="personId", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="emailId", referencedColumnName="id")}
* )
*/
private $_emails;
public function __construct()
{
$this->_emails = new Collections\ArrayCollection();
}
public function getEmails()
{
return $this->_emails;
}
$person->getEmails()
все отлично возвращает, НО
как поставить условие чтобы возвращало только когда isActive=1?
В базе чуть более 200 таблиц и в большей половине стоит поле isActive

На данном этапе я вижу решение только как подменять репозиторий и в нем уже выставлять дополнительное условие. Но опять же если понадобяться значения isActive=0 тогда в репозитории придеться выставлять флаги чтобы игнорировать этот функционал.
Еще как вариант делать в репозиториях дополнительные методы findIsActive($id), findIsActiveBy(...)
Как лучше решить эту проблему?
Как доктрин решает это?
Заранее благодарен за советы и подсказки.