ANTIC!!!!!!!!!!!!!!!! Exemples: Crear un query -------------- $query = $this->db->sqlQuery('SELECT * FROM table'); $query = $this->getDb() ->sqlQuery('SELECT') ->from(static::$table) ->columns(static::$columns); if (is_array($params)) $query->where($params); $query = $this->getDb() ->sqlQuery('SELECT') ->from(static::$table) ->columns('nom') ->columns('status'); Afegir un JOIN al SELECT del query ---------------------------------- $query->join('LEFT JOIN', 'node', 'node.node_id=' . static::$table . '.' . static::$pk); Afegir una columna al SELECT del query que es el resultat d'un altre select ------------------------------------------------------------------------------ // En aquest cas indiquem el nom de la columa al fer el column() $query->column('relatedcount', $this->db->sqlQuery('SELECT COUNT(*)')->from($related_table)->where($related_table . '.' . static::$fk . '=' . static::$table . '.' . static::$pk)); // En aquest cas el nom de la columna està al final del SQL com a AS "nomcolumna" $column = <<< SQL COALESCE( (SELECT item.nombre FROM item WHERE item.id = node.node_id LIMIT 1), node.node_id ) AS nomcolumna SQL; $query->column($column); Afegir una condició basada en el resultat d'una consulta SQL com a condició del SELECT d'un query ------------------------------------------------- $query = $this->dbh->sqlQuery('SELECT * FROM items') $sql = <<where(array( 'items.id' => array( 'IN', $this->dbh->sqlQuery($sql)->where(array('items.node_id' => $node_id)) ) )); where() ------- Construeix una sentencia SQL per afegir a un WHERE Els parametres es poden pasar de diferents maneres pero tots fan referencia a columna = valor (or operacio) Per defecte s'enten que l'operador es EQ per tant columna = valor seria: - array('columna' => valor): WHERE columna = :columna $bindparams(:columna => valor) Si tenim un array en lloc de un valor no es tracta de un operació amb operador EQ, per exemple: - array('columna' => array('>', valor)) WHERE columna > :columna $bindparams(':columna' => valor) - array('columna' => array('LIKE', '%text%')) WHERE columna LIKE %text% $bindparams(':columna' => %text%) Si el primer valor es string però el segon es array: - array('columna' => array('IN', array('valor1', 'valor2', 'valor3'))) WHERE columna IN :columna_1, :columna_2, :columna_3) $bindparams(':columna1' => valor1, ':columna2 => valor2, ':columna3' => valor3) - array('columna' => array('BETWEEN', array('valor1', 'valor2'))) WHERE columna BETWEEN :columna_1 AND :columna_2) $bindparams(':columna1' => valor1, ':columna2 => valor2) I si, dintre aquest array de valors, el primer element també es un array (en lloc de una operacio) vol dir que volem aplicar diverses operacions a la columna. Per exemple: - array('columna' => array(array('>', valor1), valor2)) WHERE columna > :columna-1 AND columna = :columna-2 $bindparams(':columna-1' => valor1, ':columna-2' => valor2) - array('columna' => array(array('>', valor1), array('<', valor2))) WHERE columna > :columna-1 AND columna < :columna-2 $bindparams(':columna-1' => valor1, ':columna-2' => valor2) 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; }