我正在使用Doctrine 1.2处理Symfony 1.4,我遇到了一些问题。
我创建了一个我的产品的Doctrine集合,如下所示:
$oProductCollection = new Doctrine_Collection('Products');
我添加了一些产品:
$oProductCollection->add($oMyProduct);
然后我想知道产品是否已经在我的收藏中。因为如果我添加我的产品两次,那将覆盖我的旧版本......
我找到了“包含”功能,但我不能直接提供我的产品对象而且我不知道密钥是什么......
你能帮我吗?
答案 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
将有效。
编辑:烤:(