首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kohana 3 ORM as_array返回阵列ORM

Kohana 3 ORM as_array返回阵列ORM
EN

Stack Overflow用户
提问于 2010-10-31 05:07:54
回答 3查看 14.3K关注 0票数 4

我正在执行一个简单的查询,希望得到一个数组。基于Kohana 3指南附带的ORM教程,我想我可以做以下工作:

代码语言:javascript
复制
ORM::factory('user')->find_all()->as_array();

但这似乎给了我一个模型对象数组(即数组( User_Model1,User_Model2 ).

通过查看源代码,我可以很容易地通过使用下面的修补程序进行黑客攻击来修复这个问题。

代码语言:javascript
复制
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一起使用,将返回所有记录的数组。这对于选择列表来说是一个很好的例子: //显示用户名的select字段(使用id作为值)回显形式::select(‘user’,ORM::factory('user')->find_all()->as_array('id',‘username’);

不知道这是不是故意的,如果是,为什么?如果我想要创建一个关联数组的数组,那么有什么更好的方法来解决这个问题呢?

EN

回答 3

Stack Overflow用户

发布于 2012-04-23 07:44:50

这是故意的行为,如(很明显?)在文档中可见,因此请不要应用该“修补程序”。特别是因为您希望修改ORM本身(不仅)。

相反,请阅读以下内容:

  • 如果as_array()应用于的行的集合,则返回行数组(每一行是单独的对象,而不是数组),
  • 如果应用于单行,则将该行作为数组返回,

所以你至少有两个解决方案:

  • 将集合转换为数组之后,显式地转换每一行,
  • 在代理类中添加您自己的methon,而不是更改模块代码(Kohana有从核心类继承的空类,您可以通过将它们放在应用程序/类中来覆盖它们)。

这个特定的类称为Kohana_Database_Result,所以将类Database_Result放在application/class/database/result.php中并使其继承Kohana_Database_Result,然后更改所需的内容(如果需要更改的话)。

票数 5
EN

Stack Overflow用户

发布于 2012-02-19 05:43:57

您正在使用ORM,但是您似乎并不真正需要它的特性(这就是,除其他外,将数据库行作为Model对象返回)。在这种情况下,解决方案可以是直接使用数据库类。从你的模型中,你可以:

代码语言:javascript
复制
$output = $this->_db->query(Database::SELECT, "select * from users");

默认情况下,Database::query()将返回一个关联数组。

票数 0
EN

Stack Overflow用户

发布于 2010-10-31 20:24:30

ORM没有你所描述的方法。在Kohana2.3.4中有一个列表()方法,可能是用户指南包含了来自旧版本(或未来版本)的错误信息?

PS。而且没有理由更改DB结果对象,因为$row可能是任何类(不仅仅是ORM)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4061930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档