Я хотел бы знать, есть ли объект в моей коллекции доктрин - PullRequest
2 голосов
/ 17 января 2012

Я работаю над Symfony 1.4 с Doctrine 1.2 и у меня есть некоторые проблемы.

Я создал одну коллекцию Доктрины моих Продуктов, как это:

$oProductCollection = new Doctrine_Collection('Products');

И я добавляю продукт в:

$oProductCollection->add($oMyProduct);

Тогда я хочу знать, есть ли продукт в моей Коллекции. Потому что, если я добавлю свой продукт дважды, это перезапишет мою старую версию ...

Я обнаружил, что "содержит" функцию, но я не могу дать свой объект продукта напрямую, и я не знаю, что это за ключ ...

Не могли бы вы помочь мне, пожалуйста?

Ответы [ 5 ]

6 голосов
/ 17 января 2012

Вы можете установить keyColumn с помощью

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

Затем вы можете использовать $oProductCollection->contains($oMyProduct->getId());, чтобы проверить, есть ли $oMyProduct в вашей коллекции.

2 голосов
/ 15 ноября 2015

Теперь вы можете написать

if ($oProductCollection->contains($oMyProduct)){
   echo "Its already in";
}else{
   $oProductCollection->add($oMyProduct);
}
1 голос
/ 17 января 2012

Еще одна альтернатива.Индексируйте свою коллекцию по id и просто проверяйте, существует ли она.Это должно быть довольно быстро.Взгляните на документы .

Что-то вроде:

$id = $oMyProduct->getId();    
if (!empty($oProductCollection[$id])){
    ...
}
0 голосов
/ 17 января 2012

Вы должны использовать второй параметр конструктора Doctrine_Collection:

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

Итак:

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

И тогда contains с идентификатором будет работать.

Редактировать: на гриле: (

0 голосов
/ 17 января 2012

Вы должны реализовать метод Produits :: equals (Produit $ p), проверяющий каждый объект коллекции с помощью цикла.

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