Lumen和MongoDB?

Gal*_*nev 13 mongodb laravel lumen

是否有可能将mongodb连接设置包含在流明框架中.从我看到的内容中,config/database.php在内部包中加载.有没有办法以某种方式扩展它以包括mongodb连接设置?

Sie*_*bah 31

我们实际上在一个巨大的项目中使用了Lumen,Laravel,Mongo和MySQL,所以我可以帮助你完成这个.假设您希望使用具有eloquent的MongoDB而不是原始的MongoClient.你可以在这里找到我在jenssegers使用的图书馆.

安装MongoDB扩展

首先,您需要安装PHP的依赖项以与mongo进行交互.有关安装mongo扩展的详细信息,请参阅PHP文档.

之后,您将不得不编辑平台的php.ini文件(apache/cli/nginx)来加载扩展.我在模块设置之前添加了以下内容

extension=mongo.so
Run Code Online (Sandbox Code Playgroud)

不言而喻,您需要在更改配置后重新启动apache/nginx.

配置流明

在根管腔文件夹中,您可以使用以下命令将其添加到您的要求中.

composer require jenssegers/mongodb
Run Code Online (Sandbox Code Playgroud)

从那里开始,您还需要在Facade 或Eloquent 初始化之前加载MongodbServiceProvider .

$app->register(Jenssegers\Mongodb\MongodbServiceProvider::class);

$app->withFacades();

$app->withEloquent();
Run Code Online (Sandbox Code Playgroud)

为了简化组织配置,我还创建了一个config文件夹和一个database.php配置文件.由于Lumen不尝试自动加载或搜索此目录,我们必须告诉它加载此配置.在加载应用程序路由之前,我将以下行放在右边.

$app->configure('database');
Run Code Online (Sandbox Code Playgroud)

在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
            )
        ),

    ],
];
Run Code Online (Sandbox Code Playgroud)

通过配置,您现在可以创建模型,在编写此模型以创建mongo模型时(检查github页面),您可以使用以下作为基础.如果mongo是您的默认驱动程序,则可以忽略$ connection变量.

<?php

namespace App;

use Jenssegers\Mongodb\Model as Eloquent;

class Example extends Eloquent 
{
    protected $connection = 'mongodb';
    protected $collection = 'example';
    protected $primaryKey = '_id';
}
Run Code Online (Sandbox Code Playgroud)

你去,你应该能够正常与mongo交互,因为驱动程序的细节检查github页面上的文档.

如果这个答案有帮助你可以将它标记为答案吗?


mat*_*e64 9

2016(更新)

现在为Lumen PHP框架提供了一个简单的Doctrine MongoDB ODM Provider.

composer require nordsoftware/lumen-doctrine-mongodb-odm
Run Code Online (Sandbox Code Playgroud)

GitHub源代码


警告

jenssegers/mongodb司机坐在上面Illumante雄辩的ORM.

想一想:Eloquent ORMSQL的主要产品.让我们随着追逐切割:包装是轮子的重新发明 - 作为副作用,不支持主要的功能.除此之外,包装不稳定且不受维护.

请注意,jenssegers/mongodb会发泄你的愤怒和沮丧:

jenssegers/mongodb爆炸问题和公关

  • 2019年更新。Jenssegers 有 110 期和 4,900 颗星,而 Nordsoftware 有 4 期和 16 颗星.... (2认同)