Можно ли как-либо включить параметры подключения mongodb в рамки просвета. Как я понял, config/database.php загружается внутри пакета просвета. Есть ли способ расширить его каким-то образом, чтобы включить настройки соединения mongodb?
Lumen и MongoDB?
Ответ 1
Мы используем Lumen, Laravel, Mongo и MySQL в одном гигантском проекте, чтобы я мог помочь вам в этом. Предполагая, что вы хотите использовать MongoDB с красноречивым, а не с необработанным MongoClient. Вы можете найти библиотеку, которую я использую из jenssegers здесь.
Установка расширения MongoDB
Во-первых, вам нужно установить зависимости для PHP для взаимодействия с монго. Особенности установки расширения mongo можно найти в документации PHP.
После этого вам нужно будет отредактировать файлы php.ini для платформ (apache/cli/nginx), чтобы загрузить расширение. Я добавил следующее перед настройками модуля
extension=mongo.so
Само собой разумеется, вам нужно перезапустить apache/nginx после изменения конфигурации.
Настройка Lumen
В папке корневого люмена вы можете добавить его в свои требования с помощью следующей команды.
composer require jenssegers/mongodb
Оттуда вам также понадобится загрузить MongodbServiceProvider до. Инициализируются фасады или эвкалипты.
$app->register(Jenssegers\Mongodb\MongodbServiceProvider::class);
$app->withFacades();
$app->withEloquent();
Для простоты организации конфигурации я также создал папку config и файл конфигурации database.php. Поскольку Lumen не пытается выполнить автозагрузку или поиск в этом каталоге, мы должны сказать ему, чтобы загрузить эту конфигурацию. Я поместил следующую строку непосредственно перед загрузкой маршрутов приложения.
$app->configure('database');
В файле database.php драйвер mongodb требует определенной структуры. Я включил mysql здесь, поскольку я использую оба, но если вы используете mongo исключительно, вы можете поменять значение по умолчанию на mongodb и удалить конфигурацию mysql.
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', ''),
'username' => env('DB_USERNAME', ''),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'mongodb' => array(
'driver' => 'mongodb',
'host' => env('MONGODB_HOST', 'localhost'),
'port' => env('MONGODB_PORT', 27017),
'username' => env('MONGODB_USERNAME', ''),
'password' => env('MONGODB_PASSWORD', ''),
'database' => env('MONGODB_DATABASE', ''),
'options' => array(
'db' => env('MONGODB_AUTHDATABASE', '') //Sets the auth DB
)
),
],
];
С конфигурацией, с которой вы теперь можете создать модель, начиная с написания этого для создания модели для mongo (проверьте страницу github), вы можете использовать следующее в качестве базы. Вы можете игнорировать переменную $connection, если mongo является вашим драйвером по умолчанию.
<?php
namespace App;
use Jenssegers\Mongodb\Model as Eloquent;
class Example extends Eloquent
{
protected $connection = 'mongodb';
protected $collection = 'example';
protected $primaryKey = '_id';
}
Там вы идете, вы должны иметь возможность нормально взаимодействовать с mongo, поскольку специфика драйвера просматривает страницу github для документации на нем.
Если бы этот ответ помог вам, вы могли бы пометить его как ответ?
Ответ 2
2016 (обновление)
Теперь существует Doctrine MongoDB ODM Поставщик для Lumen PHP framework.
composer require nordsoftware/lumen-doctrine-mongodb-odm
Внимание
jenssegers/mongodb
- Драйвер, сидящий поверх Illumante Eloquent ORM.
Подумайте об этом: Eloquent ORM первично сделан для SQL. И пусть разрезается с погоней: пакет - это переосмысление колеса - как побочный эффект, майор mongodb не поддерживается. Кроме того, пакет нестабилен и не поддерживается.
Знайте, jenssegers/mongodb
подавит ваш гнев и разочарование:
Ответ 3
Просто изменение @Sieabah пользователя:
вместо: extension=mongo.so
выберите: extension=mongodb.so