У нас есть CMS, написанная на Kohana 2.3.x (да, мы знаем, что она старая).
Когда я использую конструктор запросов, как это:
$obj = ORM::factory('product')->where(array_of_wheres)->find_all()
чем $obj
будет ORM_Iterator
,
Но когда я пишу что-то вроде этого:
$obj = ORM::factory('product');
if($something)
$obj->where(array_of_wheres);
else
$obj->where(array_of_other_wheres);
$obj->find_all();
Чем $obj
будет Product_Model
вместо ORM_Iterator
,
Может кто-нибудь объяснить, почему это происходит?
Спасибо, Дейв.
В первом примере $obj
является результатом find_all()
функция, которая является ORM_Iterator
вызывается анонимным объектом Product Model.
Но во 2-м примере $obj
является объектом ORM для модели продукта. Когда вы вызываете функцию find_all, она возвращает результат как ORM_Iterator, но не изменяет исходный объект.
Вот правильный способ сделать это
$model = ORM::factory('product');
if($something)
$model->where(array_of_wheres);
else
$model->where(array_of_other_wheres);
$obj = $model->find_all();
Других решений пока нет …