我正在执行一个简单的查询,并希望获得一个数组。 根据Kohana 3指南附带的ORM教程,我想我可以做到以下几点:
ORM::factory('user')->find_all()->as_array();
但这似乎给了我一个模型对象数组(即数组(User_Model1,User_Model2 ......
查看来源,我看到我可以通过黑客攻击以下补丁来轻松解决这个问题。
modules/database/classes/kohana/database/result.php
@@ -94,7 +94,7 @@
foreach ($this as $row)
{
- $results[] = $row;
+ $results[] = $row->as_array();
这似乎更符合用户指南所说的内容:
ORM的一个强大功能是ORM :: as_array方法,它将给定记录作为数组返回。如果与ORM :: find_all一起使用,将返回所有记录的数组。有用的一个很好的例子是选择列表:
//显示用户名的选择字段(使用id作为值)echo Form :: select('user',ORM :: factory('user') - > find_all() - > as_array('id','username'));
想知道这是否是故意的,如果是,为什么? 如果我想创建一个关联数组数组会有什么好处呢?
答案 0 :(得分:4)
这是故意行为,因为(显然?)在文档中可见,所以请不要应用“补丁”。特别是因为您想要修改ORM(不仅仅是)本身。
请改为阅读:
as_array()
,则会返回行数组(每行都是单独的对象,而不是数组),所以你至少有两个解决方案:
此特定类名为Kohana_Database_Result
,因此请将Database_Result
放在application/class/database/result.php
中并使其继承自Kohana_Database_Result
,然后更改所需内容(如果需要更改)这一点)。
答案 1 :(得分:0)
您正在使用ORM,但似乎您并不真正需要其功能(其中包括将数据库行作为Model对象返回)。在这种情况下,解决方案可能是直接使用Database类。从您的模型中,您可以:
$output = $this->_db->query(Database::SELECT, "select * from users");
默认情况下,Database::query()
将返回一个关联数组。
答案 2 :(得分:-1)
ORM没有像你描述的方法。 Kohana 2.3.4中有select_list()方法,用户指南可能包含来自旧版(或未来版)的错误信息?
PS。并且没有理由更改DB Result对象,因为$row
可能是任何(不仅是ORM)类。