Zend DB Table Abstract - PullRequest
       13

Zend DB Table Abstract

3 голосов
/ 13 июля 2011

Я наткнулся на небольшую кирпичную стену в преобразовании SQL-запроса в подходящий ORM-запрос

Запрос довольно сложный даже в терминах SQL, но я ищу способы сопоставить его с запросом ORM, так как я преобразовываю множество функций, созданных в Flex, в модели Zend Framework для проверки будущего и Цели API.

Текущий плоский SQL выглядит следующим образом:

SELECT subcategory_id, 
SUM(total) / (1+(YEAR(2011)*12+MONTH(1))-(YEAR(2011)*12+MONTH(12)))      
AS monthly_average FROM aggr_subcategory WHERE user_id=1 AND month BETWEEN 01 AND 05 
         GROUP BY user_id, subcategory_id

Основные проблемы, с которыми я сталкиваюсь, - это SUM, я могу управлять предложениями GROUP и WHERE в ORM, но не могу получить сумму в абстрактной таблице БД.

Любая помощь или указывает в правильном направлении очень ценится.

Ответы [ 2 ]

5 голосов
/ 13 июля 2011

Что по этому поводу:

    $db = Zend_Db_Table::getDefaultAdapter();

    $select = $db->select();

    $dbExpr = new Zend_Db_Expr("SUM(total) / (1+(YEAR(2011)*12+MONTH(1))-(YEAR(2011)*12+MONTH(12))) AS monthly_average");

    $select->from(
               'aggr_subcategory', 
               array('subcategory_id', $dbExpr)               
            )->where('user_id = 1')
             ->where('month BETWEEN 01 AND 05')
             ->group(array('user_id', 'subcategory_id'));


    echo $select->assemble();
    exit;

Результат:

SELECT `aggr_subcategory`.`subcategory_id`,
SUM(total) / (1+(YEAR(2011)*12+MONTH(1))-(YEAR(2011)*12+MONTH(12))) AS monthly_average 
FROM `aggr_subcategory` 
WHERE (user_id = 1) AND (month BETWEEN 01 AND 05) 
GROUP BY `user_id`, `subcategory_id

`

2 голосов
/ 13 июля 2011

Хотя ORM являются отличными инструментами, они не могут (и не должны пытаться) полностью заменить нативный SQL. Вы можете просто выполнить свой sql:

$db->query($sql);
...