找不到“MongoDB \ Driver \ Manager”类

时间:2016-03-10 15:23:37

标签: mongodb laravel laravel-5

我正在将MongoDB与Laravel集成。我正在关注此链接jenssegers/laravel-mongodb中的信息。我成功地整合了MongoDB。但是当我运行代码时会抛出此错误

  

Client.php第56行中的FatalErrorException:   未找到“MongoDB \ Driver \ Manager”类

这是代码

控制器    应用程序/ HTTP /控制器/ 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);
    }
}

以下是我们创建项目时Laravel默认提供的user.php

<?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 - &gt; mongodb部分即将到来。这是一个截屏 phpinfo

7 个答案:

答案 0 :(得分:13)

我不知道这是否是最优雅的解决方案,但它对我有用:

  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. 创建符号链接
  5. 为此文件$ sudo ln -sv /etc/php5/mods-available/mongodb.ini /etc/php5/cli/conf.d/20-mongodb.ini
  6. 创建其他符号链接
  7. 重新启动apache或使用的服务器$ sudo service apache2 restart
  8. 可能需要重新安装jenssegers / mongodb:$ composer require jenssegers/mongodb

答案 1 :(得分:7)

您可能还需要在ubuntu / debian

上重启fpm
sudo service php7.0-fpm restart

for 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

答案 2 :(得分:2)

截至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

它是PHP的PHP5.6 + nginx + MongoDB插件的单行安装程序的一部分,我甚至为它创建了一个域: http://ubuntu-script.tk

答案 3 :(得分:1)

也许它可以帮到你。

如果您正在使用新的Wamp服务器,请确保您的ide正在使用的php解释器,如果使用wamp和安装mongodb.dll的位置。

我遇到了同样的问题。

我在php 5.6.25和7.0.10上安装mongodb.dll时解决了这个问题,因为我的wamp服务器有两个版本。 安装完成后,我做了一个作曲家更新。 现在没关系。

答案 4 :(得分:0)

我会假设你无论在什么过程中都安装了php-mongodb。

当mongo连接字符串为空时,我遇到了这个错误:

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

确保您的mongo连接字符串已正确填充。

答案 5 :(得分:0)

The answer can be found here: Why MongoDB Class doesn't work in Laravel?

apokryfos gives us the answer in the first comment:

Try new \MongoClient() instead

For anyone struggling to get the mongodb.so extension working for PHP, be careful, there are two mongo drivers for PHP. For the new driver follow these instructions: http://php.net/manual/en/mongodb.installation.manual.php

Make sure all your php.ini files contain:

extension=mongodb.so

From the root of your project:

composer require mongodb/mongodb

In your PHP file:

NOTE THE BACKSLASH BEFORE MongoDB

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

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

答案 6 :(得分:0)

当您要将MongoDB数据库与任何PHP应用程序连接时,如果没有PHP MongoDB驱动程序,则可能会遇到此问题。

因此,首先您需要运行以下命令来安装Mongodb PHP扩展:

sudo apt-get install php-mongodb

现在重新启动服务器:

  sudo service apache2 restart

reference from hdtuto