0

菜鸟的问题:我需要从名为 user_id 的数据库查询中选择特定的 id。我从 DB::select 得到的结果是:

$query=DB::select...
$ids=$query->as_object()-execute();
$players=ORM::factory('User'->select()->where('id', 'in', array($this->to_array($ids)));

和方法 to_array:

private function to_array($obj)
{
    $arr=array();
    foreach($obj as $o)
    {
        array_push($arr, $o->user_id);
    }
    return $arr;
}

Kohana 3.3 ORM 中更好的解决方案是从指定的 id 创建用户容器吗?

4

1 回答 1

0

由于 ORM 扩展了 Database 类,因此不需要单独的查询:

$users = ORM::factory('User')
    ->where('your_filter', '=', $whatever_value)
    ->find_all();

此外,Database_Result带有自己的“to_array”功能:as_array例如

// Will generate an array with e.g. array(15 => 'Peter', 27 => 'Meg');
$users->as_array('id', 'name');

// Will generate a 'standard' array with e.g. array(0 => 'Peter', 1 => 'Meg')
$users->as_array(NULL, 'name');

// Will convert the results into an array e.g. array(0 => Model_User, 2 => Model_User)
$users->as_array();

因此,如果由于某种原因您确实需要使用结果集中的 Id 数组:

$users = ORM::factory('User')
    ->where('id', 'IN', $results->as_array('id', 'id'))
    ->find_all();

在构建东西之前学习一下 ORM 真的很值得,仅仅查看用户指南是不够的;看看api浏览器

于 2013-07-25T12:25:17.270 回答