【问题标题】:what is the best way to change users ids into object kohana ORM将用户 ID 更改为对象 kohana ORM 的最佳方法是什么
【发布时间】:2013-07-25 09:42:13
【问题描述】:

菜鸟的问题: 我需要从名为 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 创建用户容器的更好解决方案?

【问题讨论】:

    标签: kohana kohana-3 kohana-orm


    【解决方案1】:

    由于 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 browser

    【讨论】:

    • 好吧,这不是我问题的确切答案,因为我无法像您的示例那样将用户生成为数组,但感谢您的帮助,我已经构建了差异查询。
    • I cant generate users as array like in your example 是什么意思?
    • 我将答案(见第三个as_array 示例)更新为“也许”涵盖了您的问题
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2016-04-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多