我们有一个用Kohana 2.3.x编写的CMS(是的,我们知道它是一个旧的)。 当我像这样使用查询构建器时:
$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 :(得分:2)
在第一个示例中,$obj
是find_all()
函数的结果,该函数是由产品模型的匿名对象调用的ORM_Iterator
。
但在第二个示例中,$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();