Php Zend Select-使用具有多个变体的同一选择

Php Zend Select-使用具有多个变体的同一选择,php,zend-framework,zend-db,Php,Zend Framework,Zend Db,我正在使用下面的代码。如您所见,$oSelectE、$oSelectNV和$oSelectPV对象具有相同的基本select查询,直到我添加where、group和order变量 $oSelectE = $this->getAdapter()->select()->distinct() ->from(array('o' => 'odpocty'), array('u.id', 'kz' => 'SUM(o.kz)', '

我正在使用下面的代码。如您所见,$oSelectE、$oSelectNV和$oSelectPV对象具有相同的基本select查询,直到我添加where、group和order变量

    $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');

该条件也应用于对象$oSelectNP(我可以在发送到DB的SQL中看到)。我不明白其中的逻辑。我假设在启动$oSelectE=$oSelectNV=$oSelectPV=时,只复制这些变量的值,因此当我使用WHERE函数时,它应该只应用于$oSelectNV,而不应用于oSelectPV。这是某种ZEND bug,还是有逻辑上的解释?

可能是克隆对象的唯一引用。您可以尝试使用“克隆”关键字克隆整个对象;比如$oSelectE=clone$oSelectPV

$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');