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.