Я пытаюсь настроить MongoDB на работу с моим экземпляром Laravel 5.1 Homestead на виртуальной машине Ubuntu 14.04. Я смог успешно установить последнюю версию MongoDB, которая поддерживает PHP 7.0, используя sudo pecl install mongodb
(это правильно для 7.0, а не sudo pecl install mongo
).
Затем я добавил расширение в свои файлы php.ini (все три) на моей машине Ubuntu, каждый из которых:
/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
sudo service nginx restart
и sudo service php7.0-fpm restart
Ничего не сработало.
Как вы уже упоминали, вы используете новое монго-расширение для PHP 7.
Имена классов изменились с более старой версии, т.е.
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'));