我想知道一个对象是否在我的Doctrine Collection中

时间:2012-01-17 09:22:40

标签: php symfony1 doctrine

我正在使用Doctrine 1.2处理Symfony 1.4,我遇到了一些问题。

我创建了一个我的产品的Doctrine集合,如下所示:

$oProductCollection = new Doctrine_Collection('Products');

我添加了一些产品:

$oProductCollection->add($oMyProduct);

然后我想知道产品是否已经在我的收藏中。因为如果我添加我的产品两次,那将覆盖我的旧版本......

我找到了“包含”功能,但我不能直接提供我的产品对象而且我不知道密钥是什么......

你能帮我吗?

5 个答案:

答案 0 :(得分:6)

您可以设置keyColumn

//set the id column as key
$oProductCollection = new Doctrine_Collection('Products', 'id');

然后,您可以使用$oProductCollection->contains($oMyProduct->getId());检查收藏中是否已$oMyProduct

答案 1 :(得分:2)

现在你可以写

if ($oProductCollection->contains($oMyProduct)){
   echo "Its already in";
}else{
   $oProductCollection->add($oMyProduct);
}

答案 2 :(得分:1)

另一种选择。按ID索引您的集合,并检查它是否存在。它应该很快。看看docs

类似的东西:

$id = $oMyProduct->getId();    
if (!empty($oProductCollection[$id])){
    ...
}

答案 3 :(得分:0)

你应该实现一个方法Produits :: equals(Produit $ p)使用循环检查集合的每个对象。

foreach ($oListeProduit as $p) {
  if ($p->equals($produit)) {
    return true;
  }
}
return false;

答案 4 :(得分:0)

您必须使用Doctrine_Collection构造函数的第二个参数:

public function __construct($table, $keyColumn = null)

所以:

$oProductCollection = new Doctrine_Collection('Products', 'id');

然后带有ID的contains将有效。

编辑:烤:(