web-dev-qa-db-ja.com

ルーメンとMongoDB?

どういうわけか、mongodb接続設定をLumenフレームワークに含めることは可能ですか?私が見たように、config /database.phpはLumenパッケージの内部にロードされています。なんとかしてmongodb接続設定を含めるように拡張する方法はありますか?

13
Galin Denev

私たちは実際に1つの巨大なプロジェクトでLumen、Laravel、Mongo、MySQLを使用しているので、このプロジェクトを支援することができます。生のMongoClientではなく雄弁なMongoDBを使用したいとします。私が使用しているライブラリは、jenssegers here から見つけることができます。

MongoDB拡張機能をインストールします

まず、mongoと対話するためにPHPの依存関係をインストールする必要があります。mongo拡張機能のインストールの詳細は PHPドキュメント にあります。

その後、拡張機能をロードするために、プラットフォーム(Apache/cli/nginx)のphp.iniファイルを編集する必要があります。前に以下を追加しましたモジュール設定

extension=mongo.so

言うまでもなく、設定を変更した後、Apache/nginxを再起動する必要があります。

ルーメンの構成

ルートLumenフォルダーで、次のコマンドを使用して要件に追加できます。

composer require jenssegers/mongodb

そこから、MongodbServiceProviderをロードしてからファサードまたは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ページでドキュメントを確認してください。

この回答が役に立った場合は、回答としてマークできますか?

31
Sieabah

2016(更新)

Doctrine MongoDB ODMProviderfor Lumen PHP =フレームワーク

composer require nordsoftware/Lumen-doctrine-mongodb-odm

GitHubソースコード


警告

jenssegers/mongodbDriverで、 Illumante's Eloquent ORM の上に座っています。

考えてみてください: Eloquent ORM isprimary made for SQL。そして、追いかけてみましょう:パッケージはホイールの再発明です-副作用として、主要な mongodb 機能はサポートされていません。その上、パッケージは不安定でメンテナンスされていません。

注意してください、jenssegers/mongodbあなたの怒りと欲求不満を発散します:

jenssegers/mongodb exploding issues and pr's

9
mate64