2016-05-04 20 views
0

Wir haben ein CMS in Kohana 2.3.x geschrieben (ja, wir wissen, es ist ein altes). Wenn ich den Query Builder wie folgt verwenden:Kohana Abfrage Builder Return

$obj = ORM::factory('product')->where(array_of_wheres)->find_all() 

als die $obj wird ein ORM_Iterator sein.

Aber wenn ich so etwas schreiben:

$obj = ORM::factory('product'); 
if($something) 
    $obj->where(array_of_wheres); 
else 
    $obj->where(array_of_other_wheres); 
$obj->find_all(); 

als die $obj wird ein Product_Model statt ORM_Iterator sein.

Kann jemand erklären, warum das passiert?

Danke, Dave.

+0

Sind Sie mit PHP 5.6.21 oder PHP 7.0.5? – Faraz

+0

Ich benutze PHP 5.5.12 –

+0

was ist der Typ von $ return = $ obj-> find_all(); es muss DB-Ergebnis oder irgendeine Art von Iterator sein – Faraz

Antwort

2

Im ersten Beispiel $obj ist das Ergebnis der find_all() Funktion, die eine ORM_Iterator von anonyme Objekt des Produktmodells aufgerufen wird.

Aber im zweiten Beispiel $obj ist ORM-Objekt für Produktmodell. Wenn Sie die Funktion find_all aufrufen, wird das Ergebnis als ORM_Iterator zurückgegeben, das ursprüngliche Objekt wird nicht geändert.

ist hier richtige Weg, es zu tun

$model = ORM::factory('product'); 
if($something) 
    $model->where(array_of_wheres); 
else 
    $model->where(array_of_other_wheres); 
$obj = $model->find_all(); 
+0

Oh, was für eine Schande, dass ich diesen kleinen Fehler nicht bemerkt habe ... Vielen Dank! –