我需要用cakePHP和MongoDB数据库运行一个简单的请求。我使用 ichikaway/cakephp-mongodb 插件。插入是可以的,但这个简单的要求:
$this->Category->find('first', array('conditions' => array('name_cat' => "Cars")));
给我:
array('Category' => array('id' => null))
但是"汽车"在我的数据库中:
{
"_id" : ObjectId("54ad46e919d056cc7b483430"),
"facebook_id" : "1",
"name_cat" : "Cars"
}
我已经测试过添加"提示"参数或在模型中定义$primaryKey但结果是一样的。
感谢您的帮助。
编辑:
经过一些研究,我发现每个请求"查找"的最后一个项目都被一个带有 id:null 的项目所取代。如果我的数据库中有 2 个项目"汽车":
$this->Category->find('All', array("conditions" => array("name_cat" => "Cars")));
给我:
array(
(int) 0 => array(
'Category' => array(
'facebook_id' => '1',
'name_cat' => 'Cars',
'id' => '54ad46e919d056cc7b483430'
)
),
(int) 1 => array(
'Category' => array(
'id' => null
)
)
)
我查看了插件源代码,发现MongoCursor::getNext()函数为最后一项提供了NULL。此函数在请求执行后在 read() 函数中调用。
所以我使用了iterator_to_array()函数,结果很好。
MogodbSource中的旧代码.php(第1168至1180行)
while ($return->hasNext()) {
$mongodata = $return->getNext();
[...]
}
新代码 :
$cursor_mongo = iterator_to_array($return);
foreach ($cursor_mongo as $mongodata) {
[...]
}
这个新代码对我有用。