1

オブジェクトをMongoに押し込むのはこれが初めてです-私はPHPを使用しています。_id関数を使用して挿入するときに、MongoDB が変数を配列に追加することを知っていMongoCollection::insert()ます。問題はこれです:

という名前のパブリック変数を定義すると、変数は挿入時に_id残りますNULL

class MognoTest {
    public _id;
    public foo;

    public function __construct(){
        $this->foo = 'bar';
    }
}

$obj = new MongoTest();
$Mongo->collection->insert($obj);
var_dump($obj)
$found_obj = $Mongo->collection->findOne();
var_dump($found_obj);

var_dump()s on$objとbothは$found_obj、 を持つオブジェクトを返します_id=NULL。クラス定義で _id をコメントアウトすると、コードが正しく実行され、両方ともvar_dump()MongoID が出力されます。

クラスで _id を定義して、コードをより明確にし、Netbeans に関するコードヒントが適切に機能するようにしたいと考えています。私が見落としているものはありますか?

4

1 に答える 1

0

わかりましたので、正直に言うと好きではありませんが、解決策を得ました-私にはそれはエレガントではないようです。

class MognoTest {
    public _id;
    public foo;

    public function __construct($load = NULL){
        $this->foo = 'bar';
        if ($load != NULL && isset($load['_id']))
            $this->_id = $load['_id'];
    }
    public function insertPrep(){
        if ($this->_id === NULL)
            unset($this->_id);
    }
}

//create object, prep, insert
$obj = new MongoTest();
$obj->insertPrep();
$Mongo->collection->insert($obj);
var_dump($obj)

//get object back and reload as object
$found_obj = $Mongo->collection->findOne();
$new_obj = new MongoTest($found_obj);
var_dump($new_obj);

プログラマーは各挿入の前にコード行を追加することを忘れないでくださいMongoTest::insertPrep()。私もpublic function __insert()魔法の機能を追加しようとしましたが、うまくいきませんでした:(

私はまだより良い解決策を探しています。しかし、この問題を抱えている人のために、この修正が私が望んでいた洗練されたものではなくても、ここに修正があります.

于 2012-06-15T05:32:30.467 に答える