Why Not ?

Zend Framework’te orWhere şartını gruplamak.

Şub.03, 2010, Ortaya Karışık

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();
1 adet yorum var:
  1. open mind

    Şö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

Yorumla

Bir şeylere mi baktın ?

O zaman arama motorunu kullan:

hala mı bulamadın, o zaman bir mail atı ver. ilgilenirim.!

Bazı arkadaşlarım!

Takip etmenizde fayda var...