ちなみに、現実の条件生成はもっとメンドクセーですじょ?
<?php $query = $tbl->select(); // 中略 // 案件の状態 if (!is_a($sc->getState(), 'nothing')) { $tarState = null; if(is_a($sc->getState(), 'Model_ItemState_Interface')) { $tarState = $sc->getState(); } else { $tarState = ItemStateManager::getState($sc->getState()); } if (is_null($tarState)) { // 無効なステートなら0行戻す $query->where(false); } else { if (is_a($sc->getStateOption(), 'nothing')) { $query->where('pi.procurement_item_condition = ?', $tarState->getStateCodeLarge()); if($tarState->getStateCodeMiddle() <> $tarState::STEP_MIDDLE_ROOT) { $query->where('pi.procurement_item_condition_sub = ?', $tarState->getStateCodeMiddle()); } } else { $arrow = ''; switch ($sc->getStateOption()) { case $sc::STATE_UPPER: $arrow = '>'; break; case $sc::STATE_LOWER: $arrow = '<'; break; } if ($arrow <> '') { if($tarState->getStateCodeMiddle() == $tarState::STEP_MIDDLE_ROOT) { $query->where("pi.procurement_item_condition $arrow= ?", $tarState->getStateCodeLarge()); } else { $sql = new SqlHelper; $sql->addOr($db->quoteInto("pi.procurement_item_condition $arrow ?", $tarState->getStateCodeLarge())); $sql2 = new SqlHelper; $sql2->addAnd($db->quoteInto('pi.procurement_item_condition = ?', $tarState->getStateCodeLarge())); $sql2->addAnd($db->quoteInto("pi.procurement_item_condition_sub $arrow= ?", $tarState->getStateCodeMiddle())); $sql->addOr($sql2->makeWhere()); $query->where($sql->makeWhere()); } } } } } // 後略
こんなのが4・5個連続して並んでいるのですが、これをwhere/orWhereメソッドだけで実装したら死ねます。
まぁ、こんなレベルの条件生成はシステム全体で10個くらいしかないですケド。
大抵は、
<?php // 年度 if (!is_a($sc->getYear(), 'nothing')) { $query->where('pi.expenditures_year=?', $sc->getYear()); }
で終了。バリデーションはコントローラでやってね、って感じ?