Я пою шаблон Data Mapper в Zend Framework. Пока это работает хорошо, но теперь я дошел до того, что мне нужна ваша помощь / мнение. Итак, начнем с кода:
У нас есть таблица с несколькими людьми:
CREATE TABLE `persons` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`age` int(3) NOT NULL,
`haircolor` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id``),
);
Теперь я пытаюсь выбрать всех людей с каштановыми волосами. Я использую следующий метод в ServiceLayer
public function getPeopleByHaircolor($hair) {
return $this->getMapper()->fetch('haircolor = ?', $hair);
}
. Метод в Mapper выглядит так:
public function fetch($condition, $value) {
$resultSet = $this->getTable()->fetchAll($this->getTable()->select()->where($cond, $value));
$entries = array();
foreach($resultSet as $row) {
$entry = new Default_Model_Person();
$entry->id = $row->id;
$entry->name = $row->name;
[...]
}
return $entries;
}
Я думаю, что следую шаблону Data Mapper с этими методами ...
Теперь проблема:
Я хочу выберите Лица с каштановыми волосами И младше 20 лет. Так как я могу это сделать? Моя попытка:
public function getTeens($hair) {
$rows = $this->getMapper()->fetch('haircolor = ?', $hair);
$return = array();
foreach($rows as $row) {
if((int)$row->age < 20) $return[] = $row;
}
return $return;
}
Но если вы получите больше переменных, таких как «люди с каштановыми волосами, моложе 20 лет и с именем« Foo Bar »», мне потребуется все больше и больше методов и / или циклов foreach.
Мой вопрос :
Как бы вы это сделали в шаблоне отображения данных? Если я выполняю собственный SQL-запрос, например $ serviceLayer-> mapper-> table-> qry ('SELECT ...'), нарушает ли это шаблон Data Mapper? Мне не нравятся эти дополнительные циклы foreach, и мне кажется, что я делаю что-то не так, поэтому я написал этот вопрос.