当我尝试使用DB :: select而不是ORM时会发生这种情况。 查询作为对象返回,但会显示错误。
代码:
$bd_userdata -> offset($pagination -> offset) -> limit($pagination -> items_per_page) -> find_all() -> as_array();
错误:
ErrorException [ Fatal Error ]: Call to undefined method 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();
我之前是这样做的,反之亦然。这就是为什么它不起作用。
答案 0 :(得分:2)
如您所见,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();