/**
  * Normalize field
  *
  * @param Model $model Model
  * @param string $field Name of the field
  * @return string
  */
 private function normalizeField(Model $model, $field)
 {
     // @codingStandardsIgnoreLine
     if ($model->hasField($field)) {
         $field = $model->alias . '.' . $field;
     } elseif ($model->isVirtualField($field)) {
         $db = $model->getDataSource();
         $field = $model->getVirtualField($field);
         $field = $db->dispatchMethod('_quoteFields', array($field));
         $field = '(' . $field . ')';
     }
     return $field;
 }
Example #2
0
 /**
  * Create a GROUP BY SQL clause.
  *
  * @param string|array $fields Group By fields
  * @param Model $Model The model to get group by fields for.
  * @return string Group By clause or null.
  */
 public function group($fields, Model $Model = null)
 {
     if (empty($fields)) {
         return null;
     }
     if (!is_array($fields)) {
         $fields = array($fields);
     }
     if ($Model !== null) {
         foreach ($fields as $index => $key) {
             if ($Model->isVirtualField($key)) {
                 $fields[$index] = '(' . $Model->getVirtualField($key) . ')';
             }
         }
     }
     $fields = implode(', ', $fields);
     return ' GROUP BY ' . $this->_quoteFields($fields);
 }
Example #3
0
 /**
  * Returns an SQL calculation, i.e. COUNT() or MAX()
  *
  * @param Model  $Model  The model to get a calculated field for.
  * @param string $func   Lowercase name of SQL function, i.e. 'count' or 'max'
  * @param array  $params Function parameters (any values must be quoted manually)
  *
  * @return string An SQL calculation function
  */
 public function calculate(Model $Model, $func, $params = array())
 {
     $params = (array) $params;
     switch (strtolower($func)) {
         case 'count':
             if (!isset($params[0])) {
                 $params[0] = '*';
             }
             if (!isset($params[1])) {
                 $params[1] = 'count';
             }
             if ($Model->isVirtualField($params[0])) {
                 $arg = $this->_quoteFields($Model->getVirtualField($params[0]));
             } else {
                 $arg = $this->name($params[0]);
             }
             return 'COUNT(' . $arg . ') AS ' . $this->name($params[1]);
         case 'max':
         case 'min':
             if (!isset($params[1])) {
                 $params[1] = $params[0];
             }
             if ($Model->isVirtualField($params[0])) {
                 $arg = $this->_quoteFields($Model->getVirtualField($params[0]));
             } else {
                 $arg = $this->name($params[0]);
             }
             return strtoupper($func) . '(' . $arg . ') AS ' . $this->name($params[1]);
     }
 }