我正在尝试在 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
Kohana 有直接访问数据库的方法(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 = $查询->执行();
这样的声明不应该(也可能不能)通过 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()
在查询构建器中使用 for 表达式 -这是 Kohana 3.3.0 中的新功能。