puerto para funciones ejemplo consulta conexion archivo php orm symfony1 criteria propel

php - para - Cómo usar las funciones de MySQL en Propel



php mysql connect (2)

Creo que no hay más opción que utilizar Criteria :: CUSTOM o hacer una consulta SQL personalizada como esta:

$con = Propel::getConnection(DATABASE_NAME); $sql = "SELECT foobar.* FROM foobar WHERE created_at > DATE_SUB(curdate(), INTERVAL 1 MONTH)"; $stmt = $con->prepare($sql); $stmt->execute(); $books = FoobarPeer::populateObjects($stmt);

Eso es porque Propel intenta ser independiente de DBMS, para ayudar a la migración haciendo un cambio de valor de configuración simple, por lo que no tiene incorporadas funciones específicas de DBMS.

Quiero seleccionar registros que tienen 1 mes o más.

La consulta es: SELECT * FROM foobar WHERE created_at> DATE_SUB (curdate (), INTERVAL 1 MONTH)

Usando Propel en Symfony, hago:

$ c = nuevo Criterio
$ c-> add (FoobarPeer :: CREATED_AT, "DATE_SUB (curdate (), INTERVAL 1 MONTH)", Criterios :: GREATER_THAN);

Lo que Propel genera es: SELECT * FROM foobar WHERE created_at> ''DATE_SUB (curdate (), INTERVAL 1 MONTH)'' - en otras palabras, pone la función MySQL entre comillas simples, lo que la convierte en una cadena (sin sentido) y no obtengo archivos.

Lo que he hecho por ahora es:

$ c-> add (FoobarPeer :: CREATED_AT, "created_at> DATE_SUB (curdate (), INTERVAL 1 MONTH)", Criteria :: CUSTOM);

Pero no quiero usar soluciones personalizadas a menos que sea necesario. ¿Algún consejo además de usar Criteria :: CUSTOM?


simplemente reemplace el código de fecha mysql que está utilizando allí con una variable php precalculada que ya tenga esa fecha.

es decir

$monthAgo = ''2008-10-03''; $c = new Criteria $c->add(FoobarPeer::CREATED_AT, $monthAgo, Criteria::GREATER_THAN);

Obviamente, debe calcular dinámicamente la fecha en php, en lugar de codificarla con fuerza, pero se da cuenta de la situación.