Построение запроса к модели.

34 views
Skip to first unread message

Андрей Баранов

unread,
Jul 26, 2011, 11:08:43 AM7/26/11
to ru-zend-...@googlegroups.com
Вот колеблюсь как лучше делать...

Допустим нужно чтоб модель выдавала список пользователей, отобранный по множеству критериев... причем отбираться они будут во многих контроллерах, и со своими критериями...

И как поступил бы я, если не заморачиваться:

class Users {
function get_user_list(Zend_Db_Select $select){
 $rows = $table->fetchAll($select); //$table - Zend_Db_Table
 return new UserList($rows);
}
function get_select() {
 return $table->Select()
}

}

А в контроллере уже строил SQL запрос:
$select = Users->get_select()->where(......)->where(.....)->where(....)->order(....)-->limit(....);
$userlist = Users->get_user_list($select);

В итоге получается с одной стороны просто, а с другой: с БД работает не только модель, но и контроллер - по сути
--------------------------------
Другим способом можно объявить метод так:

function get_user_list($id = null, $email_like = null, username_like = null, username = null, lastlogin_from = null, lastlogin_to =null, и т.д. и т.п.){
// И потом сто строк кода анализа, какие параметры заданы, какие нет, чтоб создать запрос, и кучу времени на тестирование....
}
-------------------------------
Вот сижу и думаю как лучше сделать.... :)
Уже мысли написать свой объектный язык запроса к моделям, на что убью еще энное кол-во времени :)

Alexander Makhomet

unread,
Jul 26, 2011, 11:33:28 AM7/26/11
to ru-zend-...@googlegroups.com

Денис Кириченко

unread,
Jul 26, 2011, 11:38:44 AM7/26/11
to ru-zend-...@googlegroups.com
А в чем проблема просто добавить 1 метод, который будет брать на входе массив критериев, типа:
array(
  array(
    'condition' => 'where',
    'params' => array('id = ?', 123),
  ),
  array(
    'condition' => 'where',
    'params' => array('status = ?', 321),
  ),
....
);
?

как самое простое решение...

А вообще.. в .NET есть замечательный инструмент под названием Linq. Который полностью выполняет SQL функционал, но к любый обьектам.. там вообще сказка. но в PHP такое к сожалению нереально.. потому как нетипизированный скриптовый язык..

26 июля 2011 г. 18:08 пользователь Андрей Баранов <andre...@gmail.com> написал:



--
С уважением, Денис Кириченко.

Андрей Баранов

unread,
Jul 26, 2011, 12:22:50 PM7/26/11
to ru-zend-...@googlegroups.com
"свой объектный язык запроса к моделям" по сути и есть это, только
запрос строился бы на объектах, которые будут уметь генерировать SQL
запрос, а передача массивом, более простой вариант, но с одним
минусом: 'params' => array('id = ?', 123) - по сути тоже строить
запрос в контроллере... но как вариант, подумаю, так проще, спасибо :)

26 июля 2011 г. 22:38 пользователь Денис Кириченко
<zedro...@gmail.com> написал:

Kirby Rs

unread,
Jul 26, 2011, 12:30:03 PM7/26/11
to ru-zend-...@googlegroups.com
Мы как-то передавали объект с массой параметров. Но вариантов масса...
--
best regards, andrey roslik


26 июля 2011 г. 19:22 пользователь Андрей Баранов <andre...@gmail.com> написал:

Андрей Баранов

unread,
Jul 26, 2011, 12:53:31 PM7/26/11
to ru-zend-...@googlegroups.com
Интересно, в рамках DDD может и подойдет,
Но душа не лежит к DDD шибком все усложняет... когда это не нужно...
Reply all
Reply to author
Forward
0 new messages