Kohana 3 find_all возвращает модель вместо объекта набора результатов - PullRequest
2 голосов
/ 23 мая 2011

Я написал в своем контроллере условный фильтр, работающий так:

$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 Ответ

2 голосов
/ 23 мая 2011

Попробуйте сделать это:

$collection = $collection->find_all();

find_all() не сохраняет результаты запроса в объекте ORM, вам нужно сохранить его в переменной.

...