【问题标题】:Kohana 3.2 Call to undefined method Database_MySQL_Result::offset()Kohana 3.2 调用未定义的方法 Database_MySQL_Result::offset()
【发布时间】:2013-05-11 01:39:43
【问题描述】:

当我尝试使用 DB::select 而不是 ORM 时,就会发生这种情况。 查询作为对象返回,但出现错误。

代码:

$bd_userdata -> offset($pagination -> offset) -> limit($pagination -> items_per_page) -> find_all() -> as_array();

错误:

ErrorException [致命错误]:调用未定义的方法 Database_MySQL_Result::offset()

这是否意味着我必须先计算行数,然后才能将它们发送到分页中的偏移量?


当我尝试$query->count_all() 时,我收到错误消息:

未定义属性:Database_Query_Builder_Select::$count_all

我尝试了count($query),但得到了:

没有使用表 [SELECT * LIMIT 4 OFFSET 0]


解决办法如下:

$results = DB::select('*')
->from('users')
->where('id', '=', 1)
->limit($pagination->items_per_page)
->offset($pagination->offset)->execute();

还有一个计数器:

$count = $results->count_all();

我以前也这样做过,反之亦然。这就是为什么它不起作用。

【问题讨论】:

  • $bd_userdata是什么类型?
  • 这很简单:DB::select()->from('users')->where('username', '=', 'test')->execute();

标签: database kohana


【解决方案1】:

如您所见,execute() 返回 Database_Result 对象,它没有 QBuilder 的功能。您必须调用execute之前应用所有条件(where、limit、offset 等)。

这是一个简单的分页示例:

// dont forget to apply reset(FALSE)!
$query = DB::select()->from('users')->where('username', '=', 'test')->reset(FALSE);
// counting rows
$row_count = $query->count_all();
// create pagination
$pagination = Pagination::factory(array(
        'items_per_page'    =>  4,
        'total_items'       =>  $row_count,
    ));
// select rows using pagination's limit&offset 
$users = $query->offset($pagination->offset)->limit($pagination->items_per_page)->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多