Propel MySQL fonksiyonları nasıl kullanılır

2 Cevap php

Ben 1 aylık veya daha yeni kayıtları seçmek istiyorum.

Sorgu: created_at> DATE_SUB (CURDATE (), ARALIK 1 AY) filanca seçin *

Symfony'de Propel kullanarak yapmam:

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

Tahrik olduğunu üretir Ne: SELECT * created_at> 'DATE_SUB (CURDATE (), ARALIK 1 AY)' filanca DAN - diğer bir deyişle, o bir (anlamsız) bir dize yapar tek tırnak MySQL işlevi koyar ve hiçbir olsun kayıtları.

Ben şimdi ne için yaptık olduğunu:

$ C-> (FoobarPeer :: created_at, "created_at> DATE_SUB (CURDATE (), ARALIĞINI 1 AY)", Ölçüt :: ÖZEL) ekleyin;

Ama zorunda olmadıkça özel bir geçici çözümler kullanmak istemiyorum. Kriterleri :: ÖZEL kullanarak yanı sıra Herhangi bir ipucu?

2 Cevap

Ben daha :: Kriterleri kullanarak ÖZEL ya da böyle özel bir SQL sorgusu yaparak daha hiçbir seçenek olduğunu düşünüyorum:

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

Tahrik basit bir yapılandırma değer bir değişiklik yaparak göç yardımcı olmak için, DBMS-agnostik olmaya çalışır çünkü, bu yüzden yerleşik herhangi bir VTYS belirli işlevleri yoktur

sadece zaten o tarihi olan bir önceden hesaplanmış php değişkeni ile orada kullandığınız mysql tarih kodu değiştirin.

yani

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

Açıkçası, dinamik yerine onu sabit kodlama yerine, php tarihini hesaplamak gerekir, ancak resmi olsun.