Frage

Ich möchte Datensätze auszuwählen, die 1 Monat alt oder höher sind.

Die Abfrage ist: SELECT * FROM foobar WHERE created_at> DATE_SUB (CURDATE (), interval 1 Monat)

Mit Propel in Symfony, das tue ich:

  

$ c = new Die Kriterien   $ C-> add (FoobarPeer :: CREATED_AT "DATE_SUB (CURDATE (), interval 1 Monat)", Kriterien :: GREATER_THAN);

Was Propel erzeugt ist: SELECT * FROM foobar WHERE created_at> 'DATE_SUB (CURDATE (), interval 1 Monat)' - mit anderen Worten, es die MySQL-Funktion in einfache Anführungszeichen setzt, die es ein (sinnlos) string macht und ich erhalte keine Aufzeichnungen.

Was habe ich jetzt getan ist:

  

$ c-> add (FoobarPeer :: CREATED_AT "created_at> DATE_SUB (CURDATE (), interval 1 Monat)", Kriterien :: CUSTOM);

Aber ich will keine benutzerdefinierten Abhilfen verwenden, es sei denn, ich muss. Für Hinweise neben der Verwendung Criteria :: CUSTOM?

War es hilfreich?

Lösung

Ich denke, es gibt keine Option mehr als die Verwendung von Kriterien :: CUSTOM oder eine benutzerdefinierte SQL-Abfrage wie dies zu tun:

$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);

Das ist, weil Propel versucht DBMS-agnostisch zu sein, die Migration zu helfen, durch eine einfache Konfiguration Wertänderung zu tun, so dass es keine DBMS spezifische Funktionen eingebaut hat.

Andere Tipps

Sie einfach den Code mysql Datum ersetzen Sie es mit einem vorberechneten PHP-Variablen verwenden, die dieses Datum bereits in ihm hat.

d.

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

Natürlich sollten Sie dynamisch das Datum in PHP berechnen, anstatt hart es Codierung, aber Sie erhalten das Bild.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top