Chr*_*s J 4 php orm kohana-3 kohana-orm
我正在执行一个简单的查询并想要取回一个数组。根据 Kohana 3 指南附带的 ORM 教程,我认为我可以执行以下操作:
ORM::factory('user')->find_all()->as_array();
Run Code Online (Sandbox Code Playgroud)
但这似乎给了我一个模型对象数组(即数组(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();
Run Code Online (Sandbox Code Playgroud)
这似乎更符合用户指南所说的:
ORM 的一个强大功能是 ORM::as_array 方法,它将以数组的形式返回给定的记录。如果与 ORM::find_all 一起使用,将返回所有记录的数组。一个很好的例子是什么时候使用选择列表:
// 显示用户名的选择字段(使用 id 作为值) echo Form::select('user', ORM::factory('user')->find_all()->as_array('id', 'username') ));
想知道这是否是故意的,如果是,为什么?如果我确实想创建一个关联数组的数组,有什么更好的解决方法?
这是故意行为,因为(显然?)在文档中可见,所以请不要应用该“补丁”。特别是因为您想修改 ORM(不仅)本身。
而是阅读这个:
as_array()应用于行集合,则返回行数组(每行是单独的对象,而不是数组),所以你至少有两个解决方案:
这个特定的类称为Kohana_Database_Result,因此将类Database_Result放入application/class/database/result.php并使其继承自Kohana_Database_Result,然后更改您需要的内容(如果您需要更改)。