/** * @param string $fullUrl Full url. * @param array $params * @return \Phalcon\Mvc\Model\Query */ public static function buildQuery($fullUrl, array $params = array()) { /** * @var \Phalcon\Di $di */ global $di; /** * @var \Phalcon\Mvc\Model $modelName */ $modelName = Text::camelize(Text::uncamelize(Analyzer::getModelName($fullUrl))); $builder = new Builder(); $builder->setDI($di); $builder->from($modelName); self::setColumns($builder, $params); $prepareUrl = self::getPrepareUrlOperators($fullUrl); $whereSql = self::buildWhere($prepareUrl); $whereSqlReplacement = Macros::replace($whereSql, $params, $modelName); $builder->where($whereSqlReplacement); $builder = self::limit($builder, $params); $builder = self::orderBy($builder, $params); $params = new Params($fullUrl, $params); $params = $params->getPrepareParams(); $query = $builder->getQuery(); $query->setBindParams($params, true); return $query; }
/** * @param string $string * @param array $params * @param $modelName Model name. * @return string */ private static function replaceColumnsLikes($string, array $params, $modelName) { $columns = isset($params['columns']) ? $params['columns'] : self::getModelColumns($modelName); $columns = array_map(function ($column) { return Text::uncamelize($column) . ' LIKE :search:'; }, $columns); $columns = implode(' OR ', $columns); return preg_replace('/{columns likes}/', $columns, $string); }
public function testGetTextSqlOperationContaining() { $operatorExpected = 'containing'; foreach (self::$crud as $key => $operation) { if ($operatorExpected !== $key) { continue; } foreach ($operation as $param => $conditionPortion) { $sql = Operations::getTextSqlOperation(new Portion($conditionPortion)); $this->assertEquals($sql, Text::uncamelize($param) . ' LIKE :' . $param . ':', 'getTextSqlOperation create expected sql text'); } } }
private static function getColumnName(Portion $portion) { $columnName = $portion->getColumnName(); return Text::uncamelize($columnName); }