它似乎已在郵寄列表中discutedtwice,但我找不到票。
至少,您可以嘗試此代碼和/或open a ticket on Github。
/**
* Add a collection of elements, preventing duplicates
*
* @param array $collection The collection
*
* @return int the number of new element in the collection
*/
public function addCollection($collection)
{
$i = 0;
foreach($collection as $ref) {
if ($this->add($ref)) {
$i = $i + 1;
}
}
return $i;
}
/**
* Add a an element to the collection, preventing duplicates
*
* @param $element The element
*
* @return bool if the element was added or not
*/
public function add($element)
{
if ($element != NULL) {
if ($this->isEmpty()) {
$this->append($element);
return true;
} else if (!$this->contains($element)) {
set_error_handler("error_2_exception");
try {
if (!method_exists($element, 'getPrimaryKey')) {
restore_error_handler();
$this->append($element);
return true;
}
if ($this->get($element->getPrimaryKey()) != null) {
restore_error_handler();
return false;
} else {
$this->append($element);
restore_error_handler();
return true;
}
} catch (Exception $x) {
//il semble que l'element ne soit pas dans la collection
restore_error_handler(); //restore the old handler
$this->append($element);
return true;
}
restore_error_handler(); //restore the old handler
}
}
return false;
}
}
function error_2_exception($errno, $errstr, $errfile, $errline,$context) {
throw new Exception('',$errno);
return true;
}
來源
2012-06-06 07:39:43
j0k
好的,我發現這個代碼也通過搜索郵件列表。這似乎是做到這一點的方法!你有一個想法,關於如何將這些函數集成到現有項目中 - 防止手動更改PropelCollection類? – domi27
好吧,我想這會讓整合這些功能變得複雜,而不會改變PropelCollection(可能是一個臨時修復程序,等待補丁被合併)。正如弗朗索瓦在ML上說的那樣,用單元測試來寫一個補丁,然後將它發佈到Propel Github上,那麼你的函數可能會在下一個Propel版本中結束。 – j0k