2012-01-17 3 views
2

Doctrine 1.2와 Symfony 1.4에서 작업 중이며 몇 가지 문제가 있습니다.객체가 내 Doctrine 컬렉션에 있는지 알고 싶습니다.

나는이처럼 내 제품 중 하나 교리 컬렉션을 만들었습니다

$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

6

당신은 keyColumn

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

에 의해 그런 다음 $oMyProduct이 컬렉션에 이미 있는지 여부를 확인하기 위해 $oProductCollection->contains($oMyProduct->getId());를 사용할 수있는 설정할 수 있습니다. 그래서

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

: ID가

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

그리고 contains이 작동

0

당신은 Doctrine_Collection 생성자의 두 번째 매개 변수를 사용해야합니다.

편집 :. 인덱스 ID로 컬렉션

+0

이 솔루션은 내 것입니다. 감사 – startupz

1

:(또 다른 대안 구이, 그리고 존재하는 경우 바로 확인 그것은 꽤 빨리되어야 docs를 살펴 보자

뭔가처럼 :...

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

지금 당신은 매우 효율적인 아니라 그

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