3Şub/101
Zend Framework’te orWhere şartını gruplamak.
Geliştirdiğim bir projede gerekti. Mantıklı bir sonuç bulamadım. Zend_Db_Select için extend biraz uzun hikaye olduğu için kısa hızlı bi çözüm olarak gördüm.
$select = $this->_db->select();
$select->from(array('m' => $this->_name));
$select->joinLeft(array('mt' => 'article_media_type'), 'm.article_media_type_id = mt.id', array());
// @todo Search for how to make a where group in Zend_Db_Select or Zend_Db_Table_Select
// for media type if not is there a solution write one...
if (is_array($mediaType)) {
$selectX = $this->_db->select();
foreach ($mediaType as $type) {
$selectX->orWhere('mt.extension LIKE ?', $type);
}
$mediaTypesOrString = implode(' ', $selectX->getPart(Zend_Db_Select::WHERE));
$select->where($mediaTypesOrString);
unset($selectX);
} elseif (! is_array($mediaType) && $mediaType != '') {
$select->where('mt.extenstion LIKE ?', $mediaType);
}
if ($onlyActive == true) {
$select->where('m.status = ?', '1');
}
$select->where('m.name LIKE ?', '%' . $keyword . '%');
$select->order('m.createdate', 'DESC');
echo $select->__toString();
23 Şubat 2010, 17:48
Şöyle bir şekli de var;
$select->orWhere(‘(src IN(?)’, $extensions)
->orWhere(‘ dst IN(?))’, $extensions)
->where(“(” || calldate LIKE ?”, “%$filter%”)
->orWhere(‘src LIKE ?’, “%$filter%”)
->orWhere(‘dst LIKE ?)’, “%$filter%”);
Sonuç:
WHERE ((src IN(’110′, ’900′)) OR ( dst IN(’110′, ’900′))) AND ((” || calldate LIKE ‘%2010%’) OR (src LIKE ‘%2010%’) OR (dst LIKE ‘%2010%’))
Kolay gele