Для начала выкиньте весь мусор из модели и занимайтесь в ней только тем, для чего она предназначена - получением данных.
Код:
<?php defined('SYSPATH') OR die('No direct script access.');
class Model_Catalog extends Model {
/**
* Table name
* @var string
*/
protected $_table_name = 'categories';
/**
* Get all categories
*
* @param integer $limit Limit
* @param integer $offset Offset [Optional]
* @return Database_Result
*/
public function get_all($limit, $offset = 0)
{
return DB::select()
->from($this->_table_name)
->order_by('id','DESC')
->limit($limit)
->offset($offset)
->execute();
}
/**
* Get a category
*
* @param integer $id Category ID
* @return Database_Result
*/
public function get_one($id)
{
return DB::select()
->from($this->_table_name)
->where('id', '=', (int)$id)
->execute();
}
}
Проверить что (и сколько) вернули методы модели можно и нужно в вашем случае в контролёре.
Вообще, не доводите до того, чтоб контролёр отобразил представление когда данных у вас не выбрано.
Т.е. если метод модели вернул 0, то сообщайте об этом в контролёре, выводите сообщение пользователю с соответствующим редиректом.
У вас же есть нативные
count(),
empty(),
is_null(),
isset() в принципе всё элементарно
Если путаетесь какой тип данных вам вернула модель, всегда можно выполнить следующую уловку:
Код:
// код в котролёре
public function action_view()
{
$id = (int) $this->request->param('id', 0);
...
$categories = Model::factory('Catalog')->get_one($id);
// echo Debug::vars здесь означает напечатать на экране полный дамп $categories с указанием типа данных
// exit здесь означает сразу же остановить выполнение какой либо деятельности
echo Debug::vars($categories);exit;
}
Далее.
В каком это виде передавать в представление решать вам. По мне, так нагляднее будет объектом. А хотите массивом - дело ваше. Так или иначе у вас на вооружении есть as_array() и as_object(). Полученную переменную перебирайте в foreach, в каждой итерации строя строку таблицы или что там у вас. Но важно помнить одно, представление предназначенное для отображение данных, не должно получать 0/NULL и затем как то обрабатывать эту ситуацию - реагировать на неё. Всем этим должен заниматься контролёр. Представление оно на то и представление - чтоб представлять, не более.
Мне как то сказал один рубист, что самые страшные представления, где намешано всё, именно у похапистов
Согласен