propel - 使用相关查询时为"Call to a member function mergeWith() on a non-object"

标签 propel

我在使用 Propel 1.6 和 MySQL 数据库时遇到这种情况:

$query->usePublicationQuery("pq");
$query->condition('c1', '(YEAR(`pq.PUBLISHED_DATE`)) = ?', "2013")
        ->condition('c2', '(MONTH(`pq.PUBLISHED_DATE`)) = ?', "03")
        ->condition('c3', '(DAY(`pq.PUBLISHED_DATE`)) = ?', "01")
        ->combine(array('c1', 'c2','c3'), 'and', 'c123');
$query->endUse();

调用 endUse() 方法时会出现 mergeWith() 错误。当 Propel 尝试合并 ModelCriteria.php 中的查询时会抛出此错误:

$primaryCriteria->mergeWith($this); // (line 941)

$primaryCriteria 似乎为空。谁能告诉我,什么时候以及为什么会发生这种情况?

最佳答案

需要注意的是,Propel 的 useQuery() 和 endUse() 方法返回新查询,而不是更改当前查询。因此,要么使用方法链重写整个查询:

$query
    ->usePublicationQuery("pq")
        ->condition('c1', '(YEAR(`pq.PUBLISHED_DATE`)) = ?', "2013")
        ->condition('c2', '(MONTH(`pq.PUBLISHED_DATE`)) = ?', "03")
        ->condition('c3', '(DAY(`pq.PUBLISHED_DATE`)) = ?', "01")
        ->combine(array('c1', 'c2','c3'), 'and', 'c123')
    ->endUse();

...或者类似的东西:

$query2 = $query->usePublicationQuery("pq");

$query2->condition('c1', '(YEAR(`pq.PUBLISHED_DATE`)) = ?', "2013")
        ->condition('c2', '(MONTH(`pq.PUBLISHED_DATE`)) = ?', "03")
        ->condition('c3', '(DAY(`pq.PUBLISHED_DATE`)) = ?', "01")
        ->combine(array('c1', 'c2','c3'), 'and', 'c123');

$query = $query2->endUse();

关于propel - 使用相关查询时为"Call to a member function mergeWith() on a non-object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335301/

相关文章:

php - 直接从 MVC 中的 Controller 使用 ORM 类,不好的做法?

symfony1 - 在 Propel 中命名生成的函数

php - MySQL按两列查找多条记录

database - Zend 与现有的 Propel ORM

symfony1 - 有没有办法输出symfony中propel select生成的sql?

php - 在 PropelCollection 中查找特定行

mysql - 解决此推进 "Cannot redeclare function"错误的最正确方法是什么?

phpunit - 持续集成,最佳实践,使用Propel ORM将实际测试数据输入数据库

php - "User follows"与 PropelORM - 三向关系

php - 如何使用 Propel 检索具有所有特征的行?