致命的错误:使用MongoDB的PHP驱动程序1.1.2和PHP 7.0.2时没有find类'MongoDate' – Laravel 5.1

我正在尝试将MongoDBconfiguration为在虚拟Ubuntu 14.04机器上使用Laravel 5.1 Homestead实例。 我能够成功安装支持PHP 7.0的最新版本的MongoDB,使用sudo pecl install mongodb (对于7.0是正确的, 而不是 sudo pecl install mongo )。

然后,我在我的Ubuntu机器上添加了我的php.ini文件(全部三个)的扩展名,每个都在:

  • /etc/php/7.0/cli/php.ini
  • /etc/php/7.0/fpm/php.ini
  • /etc/php/7.0/cgi/php.ini

这是我写的扩展,它适用于PHP 7.0。

  • extension=mongodb.so (不是mongo.so了)

当我在浏览器中运行phpinfo()时,它指出MongoDB已经正确configuration了我的PHP 7.0。

如果MongoDBconfiguration正确,我怎么得到:

 Fatal error: Class 'MongoDate' not found 

当我尝试运行我的移民和种子与php artisan migrate:refresh --seed

我已经尝试过了:

  • 重新启动Ubuntu的机器与vagrant reloadvagrant reload --provision
  • sudo service nginx restart重启PHP和Nginx sudo service nginx restartsudo service php7.0-fpm restart

都没有工作。

正如你所提到的,你正在为PHP 7使用新的Mongo扩展。

类名称已经从旧版本,即

MongoClient现在是MongoDB\Driver\Manager

MongoDate现在是MongoDB\BSON\UTCDateTime

我不知道如何向后兼容一切,但这应该让你开始!

在我们的应用程序中,我们定期将unix时间戳转换为MongoDate实例。 例:

 new MongoDate(strtotime('-1 day')); 

因此,我创建了一个类,允许在unix时间戳和新的MongoDB\BSON\UTCDateTime之间进行转换,并返回

 <?php class MongoHelper { const SECONDS_IN_A_MILLISECOND = 1000; public static function getMongoUTCDateTimeFromUnixTimestamp($timestamp) { return new \MongoDB\BSON\UTCDateTime(intval($timestamp * self::SECONDS_IN_A_MILLISECOND)); } public static function getUnixTimestampFromMongoUTCDateTime(\MongoDB\BSON\UTCDateTime $utc_date_time) { return intval((string) $utc_date_time / self::SECONDS_IN_A_MILLISECOND); } } 

用法示例:

 MongoHelper::getMongoUTCDateTimeFromUnixTimestamp(strtotime('-1 day'));