【问题标题】:MongoDB and Phalcon APIMongoDB 和 Phalcon API
【发布时间】:2017-03-10 10:34:52
【问题描述】:

我正在尝试将 mongoDB 与 phalcon API 框架连接起来。 我的代码如下:

index.php 文件

<?php

if ($handle = opendir('include/models')) {
    while (false !== ($entry = readdir($handle))) {
        if (preg_match('/\.php$/', $entry)) {
            require_once "include/models/$entry";
        }
    }
    closedir($handle);    
}

require 'vendor/autoload.php';
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Model;

$app = new Phalcon\Mvc\Micro();
$di = new \Phalcon\DI\FactoryDefault();
$config = new Phalcon\Config\Adapter\Ini('include/config/config.ini');

// Simple database connection to localhost
$di->set('mongo', function() {
    $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
    return $manager->selectDb("MyApi");
},true);

$di->set('collectionManager', function () {
    return new Phalcon\Mvc\Collection\Manager();
});
$app->setDI($di);


$directory = new User_detail();


 $app->get('/userdetail/{code}', function ($code) use ($app,$directory) {
   $directory->getUser($app,$code);
  });

 $app->notFound(function () use ($app) {
   $app->response->setStatusCode(424, "Method Failed")->sendHeaders();
   echo json_encode(array('status' => 'ERROR', 'messages' => "Method Failed"));
});
$app->handle();
?>

模型文件 User_detail.php

<?php
use Phalcon\Mvc\Collection;
use Phalcon\Mvc\Model;
use MongoDB\Driver\Manager;
use Phalcon\Mvc\Micro;
use Phalcon\Db\Column;

class User_detail extends Collection
{

    public function initialize()
    {
        $this->setSource("User");
    }

    function getUser($app,$code)
    {
            $robot = User_detail::findFirst(
                [
                    [
                        "Name" => "android",
                    ]
                ]
            );

            echo $robot->Name; die;

    }
}
?> 

我收到错误

错误:调用未定义的方法 MongoDB\Driver\Manager::selectDb() in index.php

这有什么问题?

【问题讨论】:

  • 您的错误告诉您selectDb 方法在MongoDB\Driver\Manager 类中不存在。如果你打开那个类,你会看到那里不存在该方法......因此给你错误。
  • 谢谢!!!你有什么想法吗,用哪个函数来选择数据库?
  • 如果我没记错的话使用:$manager = new MongoClient(); return $manager-&gt;selectDB("MyApi");。查看文档:docs.phalconphp.com/en/3.0.1/reference/…。但是如果你使用的是 PHP7,你确实应该使用 phalcon 孵化器:github.com/phalcon/incubator/tree/master/Library/Phalcon/Db/…

标签: mongodb phalcon


【解决方案1】:

首先我使用 composer 将 Phalcon 孵化器安装到我的供应商目录中:

composer require phalcon/incubator

然后我确保加载了供应商库:

include_once SITE_ROOT . 'vendor/autoload.php';

然后我使用 vendor/phalcon/incubator/Library/Phalcon/Db/Adapter/MongoDB/Client.php 中的 \Phalcon\Db\Adapter\MongoDB\Client()

在services.php中:

$di->setShared('mongo', function () use ($config) {
    $mongo = new \Phalcon\Db\Adapter\MongoDB\Client();
    return $mongo->selectDatabase($config->mongodb->dbname);
});

然后确保我的 MongoCollection 扩展了 \Phalcon\Mvc\MongoCollection (vendor/phalcon/incubator/Library/Phalcon/Mvc/MongoCollection.php)。

模型/MyCollectionStats.php:

<?php

namespace Common\Models;

class MyCollectionStats extends \Phalcon\Mvc\MongoCollection
{...

【讨论】:

    【解决方案2】:

    对于 php7,您需要使用 MongoCollection 和孵化器中的其他相关类。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2015-10-07
    • 2021-09-15
    相关资源
    最近更新 更多