0

Propel ORM 1.5 を使用していて、2 つをマージする方法がありません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

メーリング リストで2 回ディスカウント されたようですが、チケットが見つかりません。

少なくとも、このコードを試すか、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 に答える