2017-01-06 11 views
0

私はこのコードを以下に使用しています。ご覧のように、オブジェクト$ oSelectE、$ oSelectNV、$ oSelectPVは、場所、グループ、および注文のバリエーションを追加するまで、同じ基本選択クエリを持ちます。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バリエーションを追加する前に)一度だけ、このような選択を使用した:私はこの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にも適用されています(DBに送信されたSQLにその状態が表示されています)。私はその論理を理解していません。 $ oSelectE = $ oSelectNV = $ oSelectPV =を起動すると、これらの変数の値だけがコピーされるので、WHERE関数を使用するときは、$ oSelectNVにのみ適用し、oSelectPVには適用しないでください。それはいくつかのZENDのバグですか?これは論理的な説明ですか?

答えて

0

は、オブジェクトがクローンされたことのみを参照することができます。あなたは "クローン"キーワードを使ってオブジェクト全体をクローンしようとすることができます。 $ oSelectE = clone $ oSelectPVのようになります。

関連する問題