Zend DB Table Abstract

3
我在将一个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函数,ORM中可以管理GROUP和WHERE子句,但无法在DB Table Abstract中获取SUM。非常感谢任何帮助或指引。

1
Zend_Db_Expr 是您正在寻找的吗? - David Weinraub
2个回答

5
这个怎么样:
    $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

`


太好了!非常有效,谢谢你。我将来会研究一下Zend_DB_Expr!出于好奇,您会推荐ORM还是静态SQL用于可API化的项目? - StuBlackett
1
@StuBlackett。很高兴能帮忙。我认为这取决于您的具体项目。如果您有一堆复杂的SQL查询,使用它们可能比将所有内容翻译成ORM更快更容易。 - Marcin

2

虽然ORM工具非常好用,但它们不能(也不应该试图)完全取代本地SQL。

您可以通过以下方式简单执行您的SQL:

$db->query($sql);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接