SqlQuery::query --------------- - Crear un query: $query = SqlQuery::query($this->db) ->from(static::$table) ->columns(empty(static::$columns) ? '*' : static::$columns) ->where($params); COLUMN ------ - Afegir columnes a un query: $query->column('(SELECT nom FROM itens WHERE itens.id = ' . static::$table . '.id) AS nom'); - Afegir columnes amb el resultat d'un altre query: $query->column('numitems', SqlQuery::query($this->db, 'SELECT COUNT(*)') ->from('items') ->where('items.id = ' . static::$table . '.id') ); $query->column(<<< SQL COALESCE( (SELECT "pagina" FROM elements sub WHERE sub.id = elements.id AND sub.context LIKE "pagina:%" LIMIT 1), (SELECT "layout" FROM elements sub WHERE sub.id = elements.id AND sub.context LIKE "layout:%" LIMIT 1), (SELECT "container" FROM elements sub WHERE sub.id = elements.id AND sub.context LIKE "container:%" LIMIT 1) ) AS context_tipus SQL ); WHERE ----- Formats: [ field, valor ] [ field, op, params ... ] [ field, op, [ params ... ] ] [ sql ] - Exemples: - [ field, valor ] [ 'status', 1 ] - [ field, op, [ params ] ] [ 'edad', ['>', '18'] ] - [ sql ] [ "name NOT NULL" ] - [ field, op, val1, val2, val3 ] [ 'nom', 'LIKE', $var1, '%' ] [ 'nom', 'IN', val1, val2 ] [ 'nom', 'BETWEEN', val1, val2 ] - [ field, op, [ val1, val2, val3 ]] [ 'nom', 'LIKE', [ $var1, '%' ]] [ 'nom', 'IN', [ val1, val2 ]] [ 'nom', 'BETWEEN', [ val1, val2 ]] - [ field, [ op, SqlQuery ] ] [ 'nom', 'IN', SqlQuery::query($this->db) ->from(static::$table) ->columns(empty(static::$columns) ? '*' : static::$columns) ->where($params) ]; - Exemples: WHERE status = 0 $query->where('status', 0) WHERE ciutat="igualada" $query->where('ciutat="igualada"') WHERE edad > 18 $query->where('edad', ['>', '18']) WHERE status = 1 AND edad > 18 $query ->where('status', 1) ->where('edad', ['>', '18']) WHERE (status = 1 AND edad > 18) $query->where([ ['status', 1 ], ['edad', ['>', 18]] ]) WHERE ( SELECT ... ) as sq $query->where( subquery, [ params ... ]) - Evitar aquesta!!! (Està per compatibilitat amb codi antic) WHERE status = 1 $query->where(['status' => 1 ]) JOIN ---- $query = \Ntlg\Db\SqlQuery::query($this->db) ->from($this->getTable()) ->columns(static::$columns, true) ->column('items_texts.nom AS nom') ->join('LEFT JOIN', 'items_texts texts', 'texts.' . static::$fk . ' = ' . static::$table . '.' . static::$pk, ['idioma' => App::get('language', '')]) ->where($params); Exemples de creació de queries ------------------------------ $query = SqlQuery::query($this->db) ->from($this->getTable()) ->columns(static::$columns, true) ->column('CONCAT(firstname, " ", lastname) AS fullname') ->column('user_group.group_id AS group_id') ->join('LEFT JOIN', 'user_client', 'user_client.client_id = ' . static::$table . '.client_id') ->where($params); $query = SqlQuery::query($this->db) ->from(static::$table) ->columns(static::$columns, true) ->column('CONCAT(firstname, " ", lastname) AS fullname') ->column('ps_alfilbe_client.id_botiga AS id_botiga') ->column('ps_accuser.id_owner AS id_owner') ->column('ps_accuser.id_supervisor AS id_supervisor') ->join('LEFT JOIN', 'ps_alfilbe_client', 'ps_alfilbe_client.id_customer = ' . static::$table . '.id_customer') ->join('LEFT JOIN', 'ps_accuser', 'ps_accuser.id_customer = ' . static::$table . '.id_customer') ->where(\Ntlg\Db\SqlQuery::prefixParams($params, static::$table)); - Exemple per afegir condicions: $query->where('MATCH(nom, keywords, cpostal, poblacio) AGAINST (:fts IN BOOLEAN MODE)'); $query->params(['fts' => $this->fts]); - Exemple de prefixar els params amb el nom de la taula per evitar ambigüitats: $query->where($\Ntlg\Db\SqlQuery::prefixParams($params, static::$table)); - Exemple d'adaptació de noms de fields a noms de columnes: $params = \Ntlg\Db\SqlQuery::renameColumns($params, [ 'group_id' => 'user_group.group_id', ]); Exemples diversos ----------------- protected function getSelectQuery($params = null) { $query = parent::getSelectQuery($params); if (isset($this->etiqueta_id)) { $query->where(array( static::$pk => array( 'IN', $this->dbh->sqlQuery('SELECT related_id') ->from('etiqueta_related') ->where(array('relation' => static::$fk, 'etiqueta_id' => $this->etiqueta_id)) ) )); } if (isset($this->marcador_id)) { $query->where(array( static::$pk => array( 'IN', $this->dbh->sqlQuery('SELECT related_id') ->from('marcador_related') ->where(array('relation' => static::$fk, 'marcador_id' => $this->marcador_id)) ) )); } return $query; } protected function getSelectQuery($params = null) { $query = parent::getSelectQuery($params); $related = 'forms'; $related_table = static::$relations[$related]['table']; $related_fk = isset(static::$relations[$related]['fk']) ? static::$relations[$related]['fk'] : static::$fk; $related_ak = isset(static::$relations[$related]['ak']) ? static::$relations[$related]['ak'] : static::$pk; // Afegim una columna addicional... $query->column('formscount', $this->dbh->sqlQuery( 'SELECT COUNT(*)')->from($related_table)->where($related_table . '.' . static::$fk . '=' . static::$table . '.' . static::$pk)); if (is_array($params)) $query->where($params); return $query; } protected function getSelectQuery($params = null) { $query = parent::getSelectQuery($params); $query->join('LEFT JOIN', 'forms_related', 'forms_related.form_id=' . static::$table . '.' . static::$pk); $column = <<< SQL COALESCE( (SELECT fedns.nombre FROM fedns WHERE fedns.id = forms_related.fed_id LIMIT 1), forms_related.fed_id ) AS federation SQL; $query->column($column); $column = <<< SQL COALESCE( (SELECT formtypes.nom FROM formtypes WHERE formtypes.id = forms_related.formtype_id LIMIT 1), forms_related.formtype_id ) AS formtype SQL; $query->column($column); if (isset($this->fed_id)) $params['forms_related.fed_id'] = $this->fed_id; if (isset($this->formtype_id)) $params['forms_related.formtype_id'] = $this->formtype_id; if (is_array($params)) $query->where($params); return $query; } protected function getSelectQuery($params = null) { $query = parent::getSelectQuery($params); if (isset($this->federation_id)) { $sql = <<where(array( static::$pk => array( 'IN', $this->dbh->sqlQuery($sql) ->where(array('f.federation_id' => $this->federation_id)) ) )); } $sql = <<federation_id)) $params['item.federation_id'] = $this->federation_id; if (isset($this->type_id)) $params['item.type_id'] = $this->type_id; return $this->dbh->sqlQuery($sql)->where($params); } protected function getSelectQuery($params = null) { $query = parent::getSelectQuery($params); if (isset($this->agencia_id)) { $sql = <<where(array( static::$pk => array( 'IN', $this->dbh->sqlQuery($sql) ->where(array('a.agencia_id' => $this->agencia_id)) ) )); } if (is_array($params)) $query->where($params); return $query; }