так и есть впринципе. но сейчас делаю немного по другому - получаю отдельно объекты папок и отдельно объекты файлов (за вычетом оффсета папок), затем склеиваю в результатирующий объект. выглядит примерно так:
<?php
/**
* Get items for listing
*
* @param int $directory_id Directory id
* @param int $limit Limit
* @param int $offset Offset
* @return stdClass
*/
public static function items_for_list($directory_id = 0, $limit = 10, $offset = 10)
{
// Get directories
$directories = ORM::factory('downloads_directory')
->where('parent_id', '=', $directory_id)
->limit($limit)
->offset($offset)
->reset(FALSE);
$count_directories = $directories->count_all();
// Get items
$items = ORM::factory('downloads_item')
->where('directory_id', '=', $directory_id)
->limit($limit - count($directories))
->offset($offset)
->reset(FALSE);
$count_items = $items->count_all();
// Result
$result = new stdClass;
$result->directories = $directories->find_all();
$result->items = $items->find_all();
$result->total_items = $count_directories + $count_items;
return $result;
}
Особо не тестировал еще, возможно будут баги с оффсетами. Такой подход очень удобный, этот метод можно использовать как в админке, так и во фронтах.
Изменил: Ant0ha 05.10.2011 / 10:47