【问题标题】:Kohana 3.3 Custom SQL with ORM modelKohana 3.3 使用 ORM 模型的自定义 SQL
【发布时间】:2013-03-06 00:33:57
【问题描述】:

我正在尝试在 Kohana 中执行自定义 SQL 语句。我有一个已经在整个站点中广泛使用的 ORM 模型,但是出现了对高级查询的需求。有没有办法使用 ORM 模型执行查询?一个查询的例子是

SELECT
    sum(TotalSales) AS sum,
    DATE(adddate(SaleDate, INTERVAL (6-weekday(SaleDate)) DAY)) AS dt
FROM Sales
GROUP BY dt
ORDER BY dt DESC

【问题讨论】:

    标签: php sql kohana


    【解决方案1】:

    Kohana 有直接访问 db (http://kohanaframework.org/3.0/guide/api/DB#query) 的方法。只需像这样创建一个函数:

    $query = DB::query(Database::SELECT, 'SELECT
        sum(TotalSales) AS sum,
        DATE(adddate(SaleDate, INTERVAL (6-weekday(SaleDate)) DAY)) AS dt
    FROM Sales
    GROUP BY dt
    ORDER BY dt DESC');
    

    $qresult = $query->execute();

    【讨论】:

      【解决方案2】:

      这样的声明不应该(也可能不能)通过 Kohana 的 ORM 完成。 ORM 旨在将表行作为对象处理并管理它们之间的关系。

      无论如何,在 Kohana 中,您可以使用 Kohana 出色的查询构建器方法,例如:

      $result = DB::select(
              array(
                  DB::expr('sum(`TotalSales`)'),
                  'sum'),
              array(
                  DB::expr('DATE(adddate(`SaleDate`, INTERVAL (6-weekday(`SaleDate`)) DAY))',
                  'dt')))
          ->from('Sales')
          ->group_by('dt')
          ->order_by('dt', 'DESC')
          ->execute();
      

      那么简单:

      $rows = $result->as_array();
      

      请务必记住,您应该在查询构建器中使用 DB::expr() 来表示表达式 - this is new from Kohana 3.3.0。

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多