Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库的互动。 每个数据库表会和一个对应的「模型」互动。

组件说明

业务侧还在用PHP5.3,composer.json文件内容如下:{

"require": {

"illuminate/database": "4.1.*",

"jenssegers/mongodb": "1.3.*"

}

}

实际安装的版本如下。

使用方式:配置文件conf/database.php新增mongodb配置。<?php

$database = array(

'mongodb' => array(

'driver' => 'mongodb',

'host' => '100.98.173.13',

'port' => 5566,

'database' => 'bigdata',

),

)

自动加载数据库,新增mongodb数据库类型。include conf/database.php;

$capsule = new Capsule;

// 支持mongodb数据库,如果name是mongodb,交给Jenssegers\Mongodb\Connection来处理

$capsule->getDatabaseManager()->extend('mongodb', function($config)

{

return new Jenssegers\Mongodb\Connection($config);

});

foreach ($database[$env] as $name => $conf) {

// 创建链接

$capsule->addConnection($conf, $name);

}

// 设置全局静态可访问

$capsule->setAsGlobal();

// 启动Eloquent

$capsule->bootEloquent();

model继承Jenssegers\Mongodb\Model.<?php

class UserModel extends Jenssegers\Mongodb\Model {

/**

* table

*

* @var string

*/

protected $table = 'users';

/**

* connection

*

* @var string

*/

protected $connection = 'mongodb';

}

上面是按网上找到的资料配置的,然后跑起来后报PHP Fatal error: Call to a member function connection() on a non-object in /web/xxx/vendor/illuminate/database/Illuminate/Database/Eloquent/Model.php on line 2810的错误。

断点定位了半天,才解决掉问题,这里记录一下。

先看下2810行的代码是什么。2808 public static function resolveConnection($connection = null)

2809 {

2810 return static::$resolver->connection($connection);

2811 }

注意这里用的是static::$resolver,关于php的static和self的区别可以参考这篇文章,这里不做过多描述。

php中self与static的区别

解决方法:

修改vendor\jenssegers\mongodb\src\Jenssegers\Mongodb\Model.php文件,注释下面这行代码。protected static $resolver;

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐