我正在尝试将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
?
我已经尝试过了:
vagrant reload
和vagrant reload --provision
sudo service nginx restart
重启PHP和Nginx sudo service nginx restart
和sudo 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'));