Php 如何返回空集合?
我有一个方法返回一个Doctrine_集合,其中包含一个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
子句()
:
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()
;
}