2012-01-17 68 views
2

我正在用Symfony 1.4和Doctrine 1.2一起工作,并且有一些问题。我想知道一个对象是否在我的教条集合中

我已创建了一个学说收藏我的产品是这样的:

$oProductCollection = new Doctrine_Collection('Products'); 

而且我在添加一些产品:

$oProductCollection->add($oMyProduct); 

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

我发现“包含”功能,但我不能直接给我的产品对象,我不知道钥匙是什么...

请问您能帮我吗?

回答

0

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

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

这不是非常有效, xdazz方法更好。 – Damien 2012-01-17 09:50:48

6

可以设置keyColumn通过

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

然后你可以使用$oProductCollection->contains($oMyProduct->getId());检查$oMyProduct是否已经在你的收藏。

0

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

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

所以:

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

然后contains用一个id会工作。

编辑:烤:(

+0

这个解决方案是我的。谢谢 – startupz 2012-01-17 14:25:28

1

另一种选择指数您的收藏的ID,只是检查是否存在应该是相当快看看在docs

喜欢的东西:。。。。

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

现在你可以写

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