web-dev-qa-db-ja.com

クラス 'MongoDB \ Driver \ Manager'が見つかりません

MongoDBとLaravelを統合しています。このリンクにある情報をフォローしています jenssegers/laravel-mongodb 。 MongoDBの統合に成功しています。しかし、コードを実行すると、このエラーがスローされます

Client.php行56のFatalErrorException:クラス 'MongoDB\Driver\Manager'が見つかりません

ここにコードがあります

Controllerapp/Http/Controller/NewController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\User;

class NewController extends Controller
{
    //
    public function index(){
        $var = User::all();
        var_dump($var);
    }
}

そして、user.phpこれは、デフォルトでLaravelプロジェクトの作成時に提供されます

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class User  extends Eloquent 
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $collection = 'users_collection';
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

このエラーが発生する理由を教えてください。

Phpinfo-> mongodbセクションが近づいています。これがスクリーンショットです phpinfo

9
garden

それが最もエレガントなソリューションであるかどうかはわかりませんが、私にとってはうまくいきました:

  1. Phpドライバーをインストールします$ Sudo pecl install mongodb
  2. 拡張ファイルを作成します$ Sudo nano /etc/php5/mods-available/mongodb.iniそして内部に書き込みます:extension = mongodb.so
  3. このファイルのシンボリックリンクを作成します$ Sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/Apache2/conf.d/20-mongodb.ini
  4. このファイルの他のシンボリックリンクを作成します$ Sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/cli/conf.d/20-mongodb.ini
  5. Apacheまたは使用したサーバーを再起動します$ Sudo service Apache2 restart

Jenssegers/mongodbの再インストールが必要になる場合があります:$ composer require jenssegers/mongodb

13
J.C. Gras

また、ubuntu/debianでfpmを再起動する必要がある場合があります

Sudo service php7.0-fpm restart

php5の

Sudo service php5-fpm restart

また、extension=mongodb.soは次のとおりです。

Apache2/php.ini
cli/php.ini
fpm/php.ini

確認するには:

locate php.ini | xargs grep mongo

php.iniファイルを表示するには:

php --ini
8
Albert s

2017年の時点で、これはPHP 5.6:

### Install MongoDB driver for PHP 5.6 ##############

echo -e "\n### Installing MongoDB PHP driver ##\n";
Sudo apt-get install php-mongodb -y

# Make sure extension=mongodb.so is present

PhpConfigFile="/etc/php/5.6/fpm/php.ini"
if grep -q mongodb.so "$PhpConfigFile"; then
  echo "extension=mongodb.so already found, dont add."
else
  echo "extension=mongodb.so" | Sudo tee "$PhpConfigFile"
  echo "Added extension=mongodb.so to $PhpConfigFile"
fi

PHP5.6 + nginx + MongoDB plugin for PHPのワンライナーインストーラーの一部であり、そのためのドメインも作成しました。 http://ubuntu-script.tk

2
Rav

MongoDBデータベースをPHPアプリケーションと接続する場合、PHP MongoDBドライバーがない場合、この問題に直面する可能性があります。

したがって、まずMongodb PHP extensionをインストールするために次のコマンドを実行する必要があります。

Sudo apt-get install php-mongodb

サーバーを再起動します。

  Sudo service Apache2 restart

hdtutoからの参照

1
Dev Semicolon

たぶんそれはあなたを助けるかもしれません。

新しいWampサーバーを使用している場合は、同じwampで使用し、mongodb.dllをインストールした場所で、ideが使用しているphpインタープリターを確認してください。

私は同じ問題を抱えていました。

私のwampサーバーには2つのバージョンがあるため、php 5.6.25と7.0.10の両方にmongodb.dllをインストールしたときに解決しました。インストール後、composer= update。を行いました。これで問題ありません。

1

どのプロセスであっても、php-mongodbが正しくインストールされていると仮定します。

Mongo接続文字列が空のときにこのエラーが発生しました。

new MongoDB\Client('mongodb://');

Mongo接続文字列が適切に入力されていることを確認してください。

0
Ligemer

答えはここにあります: なぜMongoDBクラスがLaravelで動作しないのですか?

apokryfos は、最初のコメントで答えを示します。

代わりに新しい\ MongoClient()を試してください

PHPで機能するmongodb.so拡張機能を取得するのに苦労している人のために、PHPには2つのmongoドライバーがあることに注意してください。新しいドライバーについては、次の指示に従ってください。 http://php.net/manual/en/mongodb.installation.manual.php

すべてのphp.iniファイルに以下が含まれていることを確認してください。

extension=mongodb.so

プロジェクトのルートから:

composer require mongodb/mongodb

PHPファイル:

MongoDBの前にバックスラッシュに注意してください

$client = new \MongoDB\Client("mongodb://127.0.0.1:27017");
$collection = $client->database->collection;

$cursor = $collection->find(
    [
        'some.Nice.name' => 'true'
    ]
);
0
mcmacerson