Php 如何返回空集合?

Php 如何返回空集合?,php,symfony1,doctrine,dql,doctrine-collection,Php,Symfony1,Doctrine,Dql,Doctrine Collection,我有一个方法返回一个Doctrine_集合,其中包含一个子句(): 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.v

我有一个方法返回一个Doctrine_集合,其中包含一个
子句()

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
为空数组时,此方法返回异常表中的所有行。正如条令文档中所记录的,这并不是一种意外行为,并在这里写道:

但是,当
$values
为空数组时,我希望返回一个空的
doctor\u集合
,而不是查询结果

有什么办法吗

谢谢=)

编辑:
添加一个不可能的子句,如
->where('1=0')
可以做到这一点,但对DB服务器来说这是一个不必要的请求。有人有更好的主意吗?

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

if(empty($values)) 
   return Doctine_Query::create()->from('Anomaly a')->where('1=0');

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

这可能也是许多本机条令函数在未找到结果时返回
FALSE
的原因。(例如,NestedSet函数)

所以,对于您来说,最好也返回FALSE。或者可能是一个空数组。这两个数组作为集合都可以在
foreach
循环和
count
函数中使用。
如果要使用
delete
add
函数,只需调用构造函数即可。

我个人可以使用以下技巧:

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);
}
即使有点粗俗,也能很好地工作。

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


当你已经知道你将一无所获时,为什么还要查询DB?只需检查$values,如果它是空的-根本不需要查询。我不想查询
$values
是否为空,只需返回一个空的
doctor\u集合
,也许因为这样你就可以用不起任何作用的查询加载数据库服务器了?&@nicola:我认为这是一种聪明的方法,但正如沃尔盖特所建议的,对数据库服务器来说,这是一个不必要的查询。
$values.length
?值是数组而不是对象。此外,您还缺少一个分号mr moon:)只要
-1
是一个不可能的值,它就可以正常工作。我想我会坚持这个观点。我之所以使用-1,是因为WHERE-IN子句通常用于主键,但如果您不太担心,可以将“ChuckNorr1z”设置为不可能值;)这样,您仍然可以(不必要地)往返于database.Ty,以了解
document\u Collection
角色的精确性。
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);
}
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()
  ;
}