/** * Set datasource * * @return void */ protected function _setDataSource() { $this->_dataSource = $this->_model->queryBuilder(); foreach ($this->_joins as $table) { $this->_dataSource->columnsJoinOne($table); } $this->_dataSource->columns($this->_columns); foreach ($this->_conditions as $cond) { if (is_array($cond)) { $this->_dataSource->addWhere($cond['cond'], $cond['params']); } else { $this->_dataSource->addWhere($cond); } } $sort = $this->_grid->getSortKey(); if (null === $sort) { $sort = $this->_model->getOrderExpr(); } $direction = $this->_grid->getSortDirection(); if (null === $direction) { $direction = $this->_model->getOrderAsc() ? "ASC" : "DESC"; } if ($sort) { $alias = $this->_dataSource->getCorrelationName($sort); if ($alias) { $sort = $alias . "." . $sort; } if ($direction) { $this->_dataSource->orderBy($sort . ' ' . $direction); } else { $this->_dataSource->orderBy($sort); } } }
/** * Apply filter to query builder * * @param \Engine\Mvc\Model\Query\Builder $dataSource * @return string */ public function filterWhere(Builder $dataSource) { $model = $dataSource->getModel(); if ($this->_column === self::COLUMN_ID) { $expr = $model->getPrimary(); $alias = $dataSource->getAlias(); } elseif ($this->_column === self::COLUMN_NAME) { $expr = $model->getNameExpr(); $alias = $dataSource->getAlias(); } else { $expr = $this->_column; $alias = $dataSource->getCorrelationName($this->_column); } if (!$alias) { throw new \Engine\Exception("Field '" . $this->_column . "' not found in query builder"); } return $alias . "." . $expr . " " . $this->getFilterStr($dataSource); }
/** * Apply filter to query builder * * @param \Engine\Mvc\Model\Query\Builder $dataSource * @return string */ public function filterWhere(Builder $dataSource) { $where = []; $adapter = $dataSource->getModel()->getReadConnection(); $exprEq = $adapter->escapeString($this->_value); $exprLike = $adapter->escapeString("%{$this->_value}%"); $exprBegins = $adapter->escapeString("{$this->_value}%"); $model = $dataSource->getModel(); foreach ($this->_columns as $column => $criteria) { if ($column === self::COLUMN_ID) { $alias = $dataSource->getAlias(); $column = $model->getPrimary(); } elseif ($column === self::COLUMN_NAME) { $alias = $dataSource->getAlias(); $column = $model->getNameExpr(); $t = true; } else { $alias = $dataSource->getCorrelationName($column); } if ($criteria === self::CRITERIA_EQ) { $where[] = "{$alias}.{$column} = {$exprEq}"; } elseif ($criteria === self::CRITERIA_LIKE) { $where[] = "{$alias}.{$column} LIKE {$exprLike}"; } elseif ($criteria === self::CRITERIA_BEGINS) { $where[] = "{$alias}.{$column} LIKE {$exprBegins}"; } elseif ($criteria === self::CRITERIA_MORE) { $where[] = "`{$alias}`.`{$column}` > {$exprEq}"; } elseif ($criteria === self::CRITERIA_LESS) { $where[] = "{$alias}.{$column} < {$exprEq}"; } } if (count($where) > 0) { $where = implode(" OR ", $where); return "({$where})"; } return false; }