2012-01-17 65 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); 
} 
相關問題