Why Not ? a deep breath and let yourself fall out of life

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();
Yorumlar (1) Geri izlemeler (0)
  1. Şö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


Yorum gönder.


Geri izleme yok.