流明和 MongoDB?

Lumen and MongoDB?

是否可以通过某种方式将 mongodb 连接设置包含到 lumen 框架中。据我所见,config/database.php 是在 lumen 包内部加载的。有没有办法以某种方式扩展它以包含 mongodb 连接设置?

我们实际上在一个大型项目中使用 Lumen、Laravel、Mongo 和 MySQL,因此我可以帮助您完成这一项目。假设您想将 MongoDB 与 eloquent 一起使用,而不是与原始 MongoClient 一起使用。您可以从 jenssegers here.

找到我正在使用的库

安装Mongo数据库扩展

首先,您需要安装 PHP 的依赖项才能与 mongo 交互。有关安装 mongo 扩展的详细信息,请参阅 PHP documentation.

之后,您必须为平台 (apache/cli/nginx) 编辑 php.ini 文件以加载扩展。我在 Module Settings

之前添加了以下内容
extension=mongo.so

不用说更改配置后需要重启apache/nginx

配置流明

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

composer require jenssegers/mongodb

从那里你还需要加载 MongodbServiceProvider before Facades 或 Eloquent 被初始化。

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

$app->withFacades();

$app->withEloquent();

为了简化配置,我还创建了一个配置文件夹和一个 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 页面),您可以使用以下内容作为根据。如果 mongo 是您的默认驱动程序,您可以忽略 $connection 变量。

<?php

namespace App;

use Jenssegers\Mongodb\Model as Eloquent;

class Example extends Eloquent 
{
    protected $connection = 'mongodb';
    protected $collection = 'example';
    protected $primaryKey = '_id';
}

好了,您应该能够与 mongo 正常交互,有关驱动程序的详细信息,请查看 github 页面上的文档。

如果这个答案对您有帮助,您可以将其标记为答案吗?

只是 @Sieabah 用户的变化: 相反:extension=mongo.so 选择:extension=mongodb.so

2016(更新)

现在有一个简单的Doctrine MongoDB ODM Provider for the Lumen PHP framework

composer require nordsoftware/lumen-doctrine-mongodb-odm

GitHub Source Code


警告

jenssegers/mongodbDriver 坐在 Illumante's Eloquent ORM.

之上

想一想:Eloquent ORM is primary made for SQL. And let's cut with the chase: The package is the reinvention of the wheel - as a side effect, major 功能不受支持。除此之外,该软件包不稳定且无人维护。

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