Yii2 mongodb ActiveRecord自yum更新后始终返回null,而直接查询有效

时间:2015-02-05 08:33:49

标签: php mongodb yii2

我昨天更新了我的CentOS机器(包括php 5.6.5和php-pecl-mongo 1.6.0.1)。 从那以后yii2-mongodb再也找不到记录了。

花了整个上午的测试并试图找出它并且归结为:

我直接向mongodb拨打电话。由于我使用通过Yii获得的集合句柄,因此我知道ActiveRecord类也具有mongodb的有效句柄。任何超过ActiveQuery / ActiveRecord实施的内容都会失败。我无法弄清楚原因。

我已经根据虚拟类组装了一些测试场景,试图消除尽可能多的开销:

class Test extends \yii\mongodb\ActiveRecord
{
    public static function collectionName() { return 'PostContent'; }
    public function attributes() { return ['_id', 'postId', 'text', 'title', 'renderedText', 'renderedAt']; }
}
$condition = ['postId' => 5336265];

echo 'Direct:';
var_dump(Test::getDb()->getCollection('PostContent')->mongoCollection->findOne($condition));

echo 'Direct 2: ';
var_dump(Test::getCollection()->mongoCollection->findOne($condition));

echo 'Cursor:';
$cursor = Test::getDb()->getCollection('PostContent')->mongoCollection->find($condition, []);
var_dump($cursor->next());

echo 'ActiveQuery:';
var_dump(Test::find()->where($condition)->asArray()->one());

echo 'findOne:';
var_dump(Test::findOne($condition));

输出是(裁剪实际结果,因为它们不重要):

Direct:
<snip - correct result>

Direct2:
<snip - correct result>

Cursor:
<snip - correct result>

ActiveQuery:
null

findOne:
<crash> Invalid argument supplied for foreach() (../yii2/db/BaseActiveRecord.php:1046) 

最后一次崩溃是因为null - 结果实际上通过了检查,并调用了populateRecord函数,该函数在foreach值上尝试null。< / p>

我们非常感谢任何帮助,我不知道该怎么做,而且我的网站每天都有大量的访问时间,目前已被破坏。

编辑: 我刚刚将mongo驱动程序从1.6.0-1降级回1.5.8-1并且一切正常再次。因此,新的mongodb php驱动程序版本或Yii2与它进行对话的方式存在问题。

1 个答案:

答案 0 :(得分:2)

事实证明,MongoDB中的游标功能存在错误,1.6.1正准备发布。有关详细信息,请参阅this bug ticket

再一次: 升级到php-pecl-mongo-1.6.0-1