Sigueme en Twitter
«Anterior | Siguiente»

Usando funciones de MySQL en CakePHP

11/03/2008

Algo que me atraso en la madrugada era que CakePHP escapa todas las condicionales que le mandas en una consulta SQL, y si la condicional de casualidad esta formada con una funcion de MySQL, esta obviamente no se ejecuta.

Por ejemplo, esto no funcionara: (busca que el campo created sea mas reciente que hace 1 día)

1
2
3
4
5
$conditions = array
    (
        "created" => "> date_sub( curdate(), interval 1 day)"
    );
$this->Model->findAll( $conditions, null, "depart_date ASC");

Para evitar esto CakePHP implementa un operador mágico “-!” que le indica no escapar esa sentencia y nuestra consulta se ejecute como pretendemos.

1
2
3
4
5
$conditions = array
    (
        "created" => "> -!date_sub( curdate(), interval 1 day)"
    );
$this->Model->findAll( $conditions, null, "depart_date ASC");

Voilà!


Hay 4 comentarios:

  1. 11/03/2008DbRunas - Usando funciones de MySQL en CakePHP dice:

    [...] Por ejemplo, esto no funcionara: (busca que el campo created sea mas reciente que hace 1 día)MAs: http://www.pablasso.com/2008/03/11/usando-funciones-de-mysql-en-cakephp [...]

  2. 11/03/2008David Valdez dice:

    Y quien te paso ese tip?

    yo me pregunto POR QUE NO DOCUMENTAN ESAS VALIOSISISISISISISISISISISISISISISIMAS cosas :p

  3. 11/03/2008pablasso dice:

    Esto preguntando en el IRC de cake me lo dijeron, 100% de acuerdo hay muchas cosas no documentadas (ya estuviéramos) y que no son nada intuitivas.

  4. 13/03/2011Navegante dice:

    Yo lo probé en la version de CakePHP 1.3.7 y no me funciona hay que activar algo para que funciones la opción “-!”.

    También estoy buscando como resolver que cuando utiliso esto “‘fields’=>array(
    ‘Inmuebles.id’,
    ‘Inmuebles.direccion’,
    ‘SUBSTR(Inmuebles.comentario,1,200) AS comentario’,” lo que tiene de malo esto es que me genera un array de esta manera.
    Array
    (
    [0] => Array
    (
    [Inmuebles] => Array
    ( [id]=>1,[direccion]=>’Calle xx’), [0]=>array([comentario]=>’xxxxxx xxx’)

    Lo quiero hacer con la función substr() de mysql para que sea menos dato para mysql y evitar de cortarlo con php y que es lo optimo para lo rescursos del sistema.

    Yo quiero que me quede todo dentro del mismo array Inmuebles. Alguien sabes como solucionarlo ??

    Saludos

Escribe tu comentario:

¿Escribiste código? [+]

Para hacerlo más legible puedes utilizar la etiqueta <pre>.
Ejemplo: <pre lang="php" line="1"> código </pre>
  • El atributo lang indica el lenguaje de programación.
  • El atributo line indica desde donde comienza la numeración.


  Los mas frikis pueden suscribirse a los comentarios por RSS.