我正在尝试将MongoDB配置为在虚拟Ubuntu 14.04机器上使用我的Laravel 5.1 Homestead实例。我能够使用sudo pecl install mongodb
成功安装支持PHP 7.0的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已经用我的PHP 7.0正确配置。
如果MongoDB配置正确,我怎么会一直得到:
Fatal error: Class 'MongoDate' not found
当我尝试用php artisan migrate:refresh --seed
运行迁移和种子时?
我已经试过了:
- 使用
vagrant reload
和vagrant reload --provision
重新启动Ubuntu计算机 - 用
sudo service nginx restart
和sudo service php7.0-fpm restart
重新启动PHP和Nginx
两者都不起作用。
正如您所提到的,您正在为PHP7使用新的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'));