2017-01-06 13 views
0

Я использую этот код ниже. Как вы можете видеть, объекты $ oSelectE, $ oSelectNV и $ oSelectPV имеют один и тот же базовый запрос выбора, пока я не добавлю варианты where, group и order.Zend Select - использование одного и того же выбора с несколькими вариантами

$oSelectE = $this->getAdapter()->select()->distinct() 
       ->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)')) 
       ->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni')) 
       ->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0"); 
$oSelectNV = $this->getAdapter()->select()->distinct() 
       ->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)')) 
       ->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni')) 
       ->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0"); 
$oSelectPV = $this->getAdapter()->select()->distinct() 
       ->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)')) 
       ->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni')) 
       ->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0"); 
$oSelectE->group('u.id') 
     ->order('kz DESC'); 
$oSelectNV->where("o.np = 'NV'") 
     ->group('u.id') 
     ->order('kz DESC'); 
$oSelectPV->where("o.np = 'PV'") 
     ->group('u.id') 
     ->order('kz DESC'); 

Итак, что я попробовал, было использовать выбрать только один раз, как это (перед добавлением изменений WHERE):

$oSelectE = $oSelectNV = $oSelectPV = $this->getAdapter()->select()->distinct() 
       ->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', 'obrat' => 'SUM(o.vyplata)'))       
       ->join(array('u' => 'uzivatele'), 'u.id = o.zadalid', array('u.jmeno', 'u.prijmeni')) 
       ->where("o.orgid=" . intval($orgid))->where("o.datum>='" . $od . "'")->where("o.datum<='" . $do . "'")->where("o.kz<>0"); 

Но что случилось, когда я использовал это, где изменение:

$oSelectNV->where("o.np = 'NV'") 
     ->group('u.id') 
     ->order('kz DESC'); 

Условие также применяется к объекту $ oSelectNP (я вижу, что в SQL, отправленном в БД). Я не понимаю логики этого. Я полагаю, что при инициализации $ oSelectE = $ oSelectNV = $ oSelectPV = копируется только значение этих переменных, поэтому, когда я использую функцию WHERE, ее следует применять только к $ oSelectNV и NOT to oSelectPV. Это какая-то ошибка ZEND, или это имеет логическое объяснение?

ответ

0

может быть ссылкой только на объект, клонированный. Вы можете использовать ключевое слово "clone" для клонирования всего объекта; Как $ oSelectE = clone $ oSelectPV.

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

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