2016-05-04 4 views
0

У нас есть CMS, написанная в Kohana 2.3.x (да, мы знаем, что это старый). Когда я использую конструктор запросов, как это:Kohana query builder return

$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.

Может кто-нибудь объяснить, почему это происходит?

Спасибо, Дейв.

+0

Вы используете PHP 5.6.21 или PHP 7.0.5? – Faraz

+0

Я использую PHP 5.5.12 –

+0

Что такое тип $ return = $ obj-> find_all(); это должен быть результат DB или какой-то Iterator – Faraz

ответ

2

В первом примере $obj является результатом find_all() функции, которая является ORM_Iterator, вызванной анонимным объектом Модели продукта.

Но в 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(); 
+0

Ой, какой позор я не осознал этой маленькой ошибки ... Большое спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^