2008-11-03 9 views
5

Quiero seleccionar registros que tienen 1 mes o más.Cómo usar las funciones de MySQL en Propel

La consulta es: SELECT * FROM foobar DONDE created_at> DATE_SUB (CURDATE(), el intervalo de 1 mes)

El uso de Propel en Symfony, que hago:

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

Lo que genera Propel es: SELECT * FROM foobar DONDE created_at> 'DATE_SUB (CURDATE(), INTERVALO DE 1 MES)' - en otras palabras, se pone la función de MySQL entre comillas simples, lo que hace que sea un (sentido) cadena y no obtengo ningún registro.

Lo que he hecho por ahora es:

$ c-> añadir (OtraclasePeer :: created_at, "created_at> DATE_SUB (CURDATE(), el intervalo de 1 mes)", Criteria :: CUSTOM) ;

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

+0

Dado que Propel ha evolucionado mucho desde que se respondió esta pregunta, aquí hay algunas consideraciones (escritas por el líder del proyecto Propel), que indican cuándo es relevante usar un ORM o SQL sin procesar: http: //propel.posterous. com/how-can-i-write-this-query-using-an-orm –

Respuesta

2

Creo que no hay ninguna opción más que el uso Criteria :: CUSTOM o haciendo una consulta SQL personalizada así:

$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 trata de ser DBMS-agnóstico, para ayudar a la migración haciendo una simple cambio de valor de configuración, por lo que no tiene ninguna función específica de DBMS integrada.

1

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

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 codificar duro, pero te haces una idea.

+0

Sí, podría, pero preferiría usar funciones de mysql - php tiene un soporte débil para la aritmética de fechas. –

Cuestiones relacionadas