如何在Propel中使用MySQL函数

Tom*_*ohl 5 php orm propel symfony1 criteria

我想选择1个月或更新的记录.

查询是:SELECT*FROM foobar WHERE created_at> DATE_SUB(curdate(),INTERVAL 1 MONTH)

在Symfony中使用Propel,我做:

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

Propel生成的是:SELECT*FROM foobar WHERE created_at>'DATE_SUB(curdate(),INTERVAL 1 MONTH)' - 换句话说,它将MySQL函数放在单引号中,这使得它成为一个(无意义的)字符串而我得不到记录.

我现在所做的是:

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

但除非必须,否则我不想使用自定义变通方法.除了使用Criteria :: CUSTOM之外的任何提示?

CMS*_*CMS 2

我认为除了使用 Criteria::CUSTOM 或执行如下所示的自定义 SQL 查询之外,没有其他选择:

$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);
Run Code Online (Sandbox Code Playgroud)

这是因为 Propel 试图与 DBMS 无关,通过简单的配置值更改来帮助迁移,因此它没有内置任何 DBMS 特定功能。