Lumen и MongoDB?

Можно ли как-либо включить параметры подключения mongodb в рамки просвета. Как я понял, config/database.php загружается внутри пакета просвета. Есть ли способ расширить его каким-то образом, чтобы включить настройки соединения 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

Исходный код GitHub


Внимание

jenssegers/mongodb - Драйвер, сидящий поверх Illumante Eloquent ORM.

Подумайте об этом: Eloquent ORM первично сделан для SQL. И пусть разрезается с погоней: пакет - это переосмысление колеса - как побочный эффект, майор не поддерживается. Кроме того, пакет нестабилен и не поддерживается.

Знайте, jenssegers/mongodb подавит ваш гнев и разочарование:

jenssegers/mongodb взрывающиеся проблемы и pr's

Ответ 3

Просто изменение @Sieabah пользователя: вместо: extension=mongo.so выберите: extension=mongodb.so