Kohana 3 find_all возвращает модель вместо объекта набора результатов
Я написал в моем контроллере условный фильтр, работающий так:
$this->_view = View::factory('crud/index')
->bind('collection', $collection);
$collection = ORM::factory($this->_model);
if (Request::current()->method() === Request::POST)
{
foreach (Request::current()->post('filter') as $field => $value)
{
$collection->where($field, '=', $value);
}
}
$collection->find_all();
И в представлении у меня есть условное отображение сообщения, если в базе данных нет отфильтрованных результатов или строк.
<?php if ( ! $collection->count()): ?>
Это дает мне исключение:
Kohana_Exception [ 0 ]: Invalid method count called in Model_Product
Проблема в том, что до добавления фильтра мое действие контроллера было:
$this->_view = View::factory('crud/index')
->bind('collection', $collection);
$collection = ORM::factory($this->_model)->find_all();
А также $collection->count()
работал просто отлично в представлении. Почему метод ORM find_all() возвращает модель, даже если я не публикую ее, даже если код не входит в условное выражение? Просто ломаю $collection = ORM::factory($this->_model)->find_all();
в $collection = ORM::factory($this->_model);
а также $collection->find_all();
ломает все это. Почему это странное поведение? Благодарю.
1 ответ
Попробуйте сделать это:
$collection = $collection->find_all();
find_all()
не сохраняет результаты запроса в объекте ORM, вам нужно сохранить его в переменной.