PHP7与mongodb

原扩展https://pecl.php.net/package/mongo仅支持php5.6及以下版本。

对于php7,官方出了一个新版本扩展:https://pecl.php.net/package/mongodb

但坑爹的是,新的mongodb扩展简直难用到屎。

所幸的是,mongo官方出了一个composer包,让一切看起来似乎没有那么糟:https://github.com/mongodb/mongo-php-library

看起来这个包的作用是为了简化https://pecl.php.net/package/mongodb这个包带来的坑爹使用体验,那为何不保留原来的https://pecl.php.net/package/mongo包呢?

phalcon与mongodb

在php5.6及以下,phalcon对mongo支持还是可以的。但到了php7,phalcon默认是不支持的:https://docs.phalconphp.com/bg/3.2/db-odm

Please note that if you are using the Mongo driver provided by PHP 7, the ODM will not work for you. There is an incubator adapter but all the Mongo code must be rewritten (new Bson type instead of arrays, no MongoId, no MongoDate, etc...). Please ensure that you test your code before upgrading to PHP 7 and/or Phalcon 3+

phalcon与incubator

incubator是一个phalcon的官方扩展库。其中就包含了对php7的mongo支持。

使用incubator

安装incubator后,和php6下的phalcon的mongoClient配置类似:

use Phalcon\Mvc\Collection\Manager;
use Phalcon\Db\Adapter\MongoDB\Client;

// Initialise the mongo DB connection.
$di->setShared(
    'mongo',
    function () use ($config) {
        $mongo = new Client();
        return $mongo->selectDatabase($config->database->mongo->dbname);
    }
);

// Collection Manager is required for MongoDB
$di->setShared('collectionManager', function () {
    return new Manager();
});

实际上在incubator的incubator/Library/Phalcon/Db/Adapter/MongoDB/目录中,已经包含了:https://github.com/mongodb/mongo-php-library的所有代码。

所以不知道phalcon官方不用require composer包的方式集成https://github.com/mongodb/mongo-php-library的原因是什么?

model举例

不管怎样,官方提供的东西还是有点保障的,们在model中继承MongoCollection即可开心的用起来了

use Phalcon\Mvc\MongoCollection;

class Users extends MongoCollection
{

    public $name;
    public $email;

}

使用方法

普通的调用方式

$first = Users::findFirst();
var_dump($first->name);

mongo调用方式

如果你想获得一个php5下类似MongoClient的Collection类也是可以的:

$users = new Users();
$one = $users->getConnection()->selectCollection($users->getSource())->findOne();
var_dump($one);

其他补充

总感觉对于PHP7,mongodb支持始终不够。在之前的项目有想用PHP7的冲动,但看到对mongo的支持和一些bug只能望而却步了。

https://github.com/mongodb/mongo-php-library/issues/216

这个官方库的bug虽然已经解决了,但是是否还有更多坑需要们去踩呢?

如果您觉得您在我这里学到了新姿势,博主支持转载,姿势本身就是用来相互学习的。同时,本站文章如未注明均为 hisune 原创 请尊重劳动成果 转载请注明 转自: 关于phalcon+php7+mongodb的一些事 - hisune.com