Тема: Обработка SQL-запросов в фреймворках

Здравствуйте. Недавно озаботился следующим вопросом. Пишу приложение на Zend_Framework (да в принципе фреймворк не важен, такой вопрос можно поднять с любым) и нужно выполнить к БД один запрос небольшого размера. В чистом виде он выглядит вот так

SELECT `su`.`group_id` , `su`.`login` , `su`.`password` , `su`.`hash` , `su`.`shell_id` ,
`sug`.`name` AS `shell` , `sus`.`name` AS `group`
FROM `server_users` AS `su`
INNER JOIN `server_users_groups` AS `sug` ON sug.id = su.group_id
INNER JOIN `server_users_shells` AS `sus` ON sus.id = su.shell_id
WHERE (su.server_id = '1')

И есть 2 варианта его выполнения. Первый - послать адаптеру запрос обычным текстом и получить ответ.

$result = $this->getAdapter()->fetchAll("SELECT `su`.`group_id` , `su`.`login` , `su`.`password` , `su`.`hash` , `su`.`shell_id` , 
`sug`.`name` AS `shell` , `sus`.`name` AS `group`
FROM `server_users` AS `su`
INNER JOIN `server_users_groups` AS `sug` ON sug.id = su.group_id
INNER JOIN `server_users_shells` AS `sus` ON sus.id = su.shell_id
WHERE (su.server_id = ?)", $serverId);

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

$db = $this->getAdapter();
$select = $db->select();
$select->from(array('su' => 'server_users'),
              array('group_id', 'login', 'password', 'hash', 'shell_id', 'home_dir', 'additional'))
           ->join(array('sug' => 'server_users_groups'),
              'sug.id = su.group_id',
              array('group' => 'name'))
           ->join(array('sus' => 'server_users_shells'),
                      'sus.id = su.shell_id',
                      array('shell' => 'name'))
           ->where('su.server_id = ?', $serverId);

$resut = $db->fetchAll($select);

Последний вариант мне кажется каким-то более запутанным, что-ли hmm
Какой из методов желательнее использовать в данной ситуации? Первый - простой, но без использования специальных инструментов ZF, или второй - более запутанный, но с использованием инструментов ZF?

2

Re: Обработка SQL-запросов в фреймворках

А это одно и тоже по сути дела. Для примера вам если нужен чай то надо топать на кухню а не зонить в кафешку... Проще говоря если взять сам класс обросотки SQL запросов фраймворка то он скорее всего совершит еще 10 телодвижений выполняя ту же задачу что и вы посылая запрос в базу на прямую.

Есть правда одно существенное отличие, есть класс баз данных adodb его плюс в том что он умеет работпть с множеством баз даннвз mssql, mysql, postgress... и используя именно его функции ненадо менять синтаксис запросов при пеоеносе проекта на другую базу.

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