Skip to content

Instantly share code, notes, and snippets.

@Bujhm
Created April 5, 2011 07:41
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Bujhm/903180 to your computer and use it in GitHub Desktop.
Save Bujhm/903180 to your computer and use it in GitHub Desktop.
Query Builder для Yii
public function buildQuery($query)
{
$sql=isset($query['distinct']) && $query['distinct'] ? 'SELECT DISTINCT' : 'SELECT';
$sql.=' '.(isset($query['select']) ? $query['select'] : '*');
if(isset($query['from']))
$sql.="\nFROM ".$query['from'];
else
throw new CDbException(Yii::t('yii','The DB query must contain the "from" portion.'));
if(isset($query['where']))
$sql.="\nWHERE ".$query['where'];
if(isset($query['join']))
$sql.="\n".(is_array($query['join']) ? implode("\n",$query['join']) : $query['join']);
if(isset($query['group']))
$sql.="\nGROUP BY ".$query['group'];
if(isset($query['having']))
$sql.="\nHAVING ".$query['having'];
if(isset($query['order']))
$sql.="\nORDER BY ".$query['order'];
$limit=isset($query['limit']) ? (int)$query['limit'] : -1;
$offset=isset($query['offset']) ? (int)$query['offset'] : -1;
if($limit>=0 && $offset>=0)
$sql=$this->_connection->getCommandBuilder()->applyLimit($sql,$limit,$offset);
if(isset($query['union']))
$sql.="\nUNION (\n".(is_array($query['union']) ? implode("\n) UNION (\n",$query['union']) : $query['union']) . ')';
return $sql;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment