0

使用 Propel ORM 1.5,我缺少一种合并两个PropelCollections.

一个简短的建议可能是:

public function mergeCollection($collection){

    foreach($collection as $i => $item){
         if( ! $this->contains($item)){
             // append item
             $this->append($item);
         }
    }
}

所以我是Propel的新手,我想问你,是否有更好的方法来做到这一点?
或者这个功能是否已经包含在 Propel 中,但我还没有发现?

4

1 回答 1

1

它似乎在邮件列表中被分发 了两次,但我找不到票。

至少,您可以尝试此代码和/或在 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-06T07:39:43.210 回答