如何返回一个空的Doctrine_Collection



我有一个方法,返回一个Doctrine_Collection,与whereIn()子句:

public function getByValues($values)
{
  if (!is_array($values))
    throw new sfException('Wrong parameter type. Excepted array.');
  return Doctrine_Query::create()
    ->from('Anomaly a')
    ->whereIn('a.value', $values);
}

但是,当$values是一个空数组时,该方法返回在AnomalyTable中的所有行。这不是一个意外的行为,正如Doctrine文档中所记录的,并写在这里:Doctrine where in with Doctrine_Query

然而,我想返回一个空的Doctrine_Collection而不是我的查询结果,当$values是一个空数组。

我该怎么做呢?

谢谢=)

编辑:

添加一个不可能的子句,如->where('1=0')可以达到目的,但这是对DB服务器的不必要的请求。谁有更好的主意?

您还需要execute方法来获取查询结果!这样每次返回类型都是相同的):

public function getByValues($values)
{
  if (!is_array($values))
    throw new sfException('Wrong parameter type. Excepted array.');
  if (empty($values)) {
    return new Doctrine_Collection('Anomaly');
  }
  return Doctrine_Query::create()
    ->from('Anomaly a')
    ->whereIn('a.value', $values)
    ->execute()
  ;
}

按值,我想你是指$values对吗?只需添加一些东西来检查值是否为空,然后手动提供一个空集合。

if(empty($values)) 
   return Doctine_Query::create()->from('Anomaly a')->where('1=0');
if(count($values)){
  return Doctrine_Query::create()
    ->from('Anomaly a')
    ->whereIn('a.value', $values);
} else {
  return Doctine_Query::create()
    ->from('Anomaly a')
    ->where('0=1');
}

我认为那是不可能的。Doctrine_Collection不仅仅是对象的结果集/数组。它还具有删除和添加对象并保持该状态的方法。

这可能也是为什么许多本地Doctrine函数在没有找到结果时返回FALSE的原因。(例如,NestedSet函数)。

所以,对你来说,最好也返回FALSE。或者可能是一个空数组。作为Doctrine_Collection的两个数组都可以用于foreach循环和count函数。如果要使用deleteadd函数,只需调用构造函数即可。

我个人使用以下技巧:

public function getByValues($values)
{
  if (!is_array($values))
    throw new sfException('Wrong parameter type. Excepted array.');
  $values = empty($values) ? array(-1) : $values;
  return Doctrine_Query::create()
    ->from('Anomaly a')
    ->whereIn('a.value', $values);
}

相关内容

  • 没有找到相关文章

最新更新