Mongo _id在类定义中

时间:2012-06-14 09:54:15

标签: php mongodb-php

这是我第一次将对象推入Mongo - 我正在使用PHP。我知道MongoDB在使用_id函数插入时将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()$obj上的$found_obj都返回_id=NULL的对象。如果我在类定义中注释掉_id,代码会正常运行,并且var_dump()都会打印一个MongoID。

我想在类中定义一个_id,以使我的代码更清晰,并使我在Netbeans上的代码提示正常工作。我有什么东西可以忽略吗?

1 个答案:

答案 0 :(得分: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()魔法功能,但没有成功:(

我仍然在寻找更好的解决方案。但是对于有这个问题的人来说,即使这个解决方案不是我希望的优雅解决方案,也可以解决这个问题。