2

我在使用 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 似乎为空。谁能告诉我,何时以及为什么会发生这种情况?

4

2 回答 2

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();
于 2013-06-17T19:38:05.017 回答
0

你如何实例化 $query 变量?你确定你不想这样做:

  $query = PublicationQuery::create()

如果没有更多信息,解决此问题将非常困难,请提供更多代码。

于 2013-03-11T19:01:47.647 回答