. */ /** * Doctrine_Search_Query * * @package Doctrine * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @category Object Relational Mapping * @link www.phpdoctrine.com * @since 1.0 * @version $Revision: 1939 $ * @author Konsta Vesterinen */ class Doctrine_Search_Query { /** * @var Doctrine_Query $query the base query */ protected $_query; /** * @var array $_aliases an array of searchable component aliases */ protected $_aliases = array(); /** * @param Doctrine_Query $query the base query */ public function __construct($query) { if (is_string($query)) { $this->_query = new Doctrine_Query(); $this->_query->parseQuery($query); } elseif ($query instanceof Doctrine_Query) { $this->_query = $query; } else { throw new Doctrine_Exception('Constructor argument should be either Doctrine_Query object or a valid DQL query string'); } $this->_query->getQuery(); } /** * getQuery * * @return Doctrine_Query returns the query object associated with this object */ public function getQuery() { return $this->_query; } public function addAlias($alias) { $this->_aliases[] = $alias; } public function search($text) { $text = strtolower($text); $terms = Doctrine_Tokenizer::quoteExplode($text); foreach ($this->_aliases as $alias) { $a = array(); foreach ($terms as $term) { $a[] = 'i.keyword = ?'; } $this->_query->addWhere(implode(' OR ', $a), $terms); } } public function execute() { $resultSet = $this->_query->execute(); return $resultSet; } }