“在使用相关查询时,在非对象上调用成员函数mergeWith()

时间:2013-03-11 09:41:05

标签: 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();

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

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

$ primaryCriteria似乎是null。任何人都可以告诉我,何时以及为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

需要注意的是,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();

答案 1 :(得分:0)

如何实例化$ query变量?你确定你没有尝试这样做:

  $query = PublicationQuery::create()

如果没有更多信息,请对此进行排查非常困难,请提供更多代码。