Zend_Db_Select と Zend_Db_Table_Select は、私がわずか 6 か月前に対処しなければならなかった問題を解決する優れた方法です。
データベースに本のテーブルがあり、テーブルのフィールド全体で全文検索を実行できるように検索関数を定義したとします。
Default_Model_DbTable_Books.php:
public class Default_Model_DbTable_Books extends Zend_Db_Table_Abstract {
// Other variables and methods here...
public function search($query) {
// Initialize Zend_Db_Table_Select object
$select = $this->select(true);
if (isset($query) && is_string($query)) {
// Logic for search (don't actually do this, it's horrible for performance)
$db = $this->getAdapter();
$where = $db->quoteInto('isbn LIKE ? OR name LIKE ? OR author LIKE ?', $query);
$search->where($where)
->order('date_published DESC')
->group('author');
}
return $select;
}
}
Default_Model_Mapper_Book.php:
public class Default_Model_Mapper_Book {
// Defined functions as per Zend Quickstart Mapper classes...
public function search($query) {
// Returns Zend_Db_Table_Select object
return $this->getDbTable()->search($query);
}
}
Default_BooksController.php:
public function listAction() {
$mapper = new Default_Model_Mapper_Book();
$select = $mapper->search($this->_getParam("query"));
$paginator = Zend_Paginator::factory($select);
}