php - 如果我只想在 PhalconPHP 中使用 MongoDB,我应该对 db 使用什么设置?

标签 php mongodb phalcon

我使用 Phalcon DevTools (1.2.3) 创建了一个简单的 Phalcon 项目。 现在我想使用 MongoDB 作为数据库。我该如何正确设置? 我已经走到这一步了(参见下面的代码):

这是我的 config.php

<?php

return new \Phalcon\Config(array(
'database' => array(
    'adapter'     => 'Nosql', //Was 'Mysql', but Nosql is not supported?
    'host'        => 'localhost',
    'username'    => 'root',
    'password'    => '',
    'dbname'      => 'test',
),
'application' => array(
    'controllersDir' => __DIR__ . '/../../app/controllers/',
    'modelsDir'      => __DIR__ . '/../../app/models/',
    'viewsDir'       => __DIR__ . '/../../app/views/',
    'pluginsDir'     => __DIR__ . '/../../app/plugins/',
    'libraryDir'     => __DIR__ . '/../../app/library/',
    'cacheDir'       => __DIR__ . '/../../app/cache/',
    'baseUri'        => 'localhost/',
)
));

这是我的 services.php

<?php    

use Phalcon\DI\FactoryDefault,
Phalcon\Mvc\View,
Phalcon\Mvc\Url as UrlResolver,
//Phalcon\Db\Adapter\Pdo\Mysql as DbAdapter, //Do I need this when I use Mongo?
Phalcon\Mvc\View\Engine\Volt as VoltEngine,
Phalcon\Mvc\Model\Metadata\Memory as MetaDataAdapter,
Phalcon\Session\Adapter\Files as SessionAdapter;

/**
 * The FactoryDefault Dependency Injector automatically register the right services  providing a full stack framework
 */
$di = new FactoryDefault();

/**
 * The URL component is used to generate all kind of urls in the application
 */
$di->set('url', function() use ($config) {
    $url = new UrlResolver();
    $url->setBaseUri($config->application->baseUri);
    return $url;
}, true);

/**
 * Setting up the view component
 */
$di->set('view', function() use ($config) {

$view = new View();

$view->setViewsDir($config->application->viewsDir);

$view->registerEngines(array(
    '.volt' => function($view, $di) use ($config) {

        $volt = new VoltEngine($view, $di);

        $volt->setOptions(array(
            'compiledPath' => $config->application->cacheDir,
            'compiledSeparator' => '_'
        ));

        return $volt;
    },
    '.phtml' => 'Phalcon\Mvc\View\Engine\Php'
));

return $view;
}, true);

/**
 * Database connection is created based in the parameters defined in the configuration file
 */
$di->set('mongo', function() use ($config) {
    $mongo = new Mongo();
    return $mongo->selectDb($config->database->dbname);
});

/**
 * If the configuration specify the use of metadata adapter use it or use memory otherwise
 */
$di->set('modelsMetadata', function() {
    return new MetaDataAdapter();
});

/**
 * Start the session the first time some component request the session service
 */
$di->set('session', function() {
    $session = new SessionAdapter();
    $session->start();
    return $session;
});

我使用文档将标准 mysql 数据库连接更改为 mongo。 但现在我必须在 Config 中设置数据库适配器,但 Nosql 似乎不起作用。尝试创建模型时,DevTools 在终端中抛出此错误:

Error: Adapter Nosql is not supported

当我在配置中为适配器输入“Mysql”并尝试创建模型时,这是我收到的错误:

Error: SQLSTATE[HY000] [2002] No such file or directory

是否需要设置Mysql适配器才能使用Mongo/Nosql?或者我应该为适配器/配置添加其他内容?有任何想法吗?

最佳答案

service.php文件中注册了mongo服务

$di->set('mongo', function() {
    $mongo = new Mongo();
    return $mongo->selectDb("DB_NAME");
}, true);

下面放置以下代码行,

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

完成上述操作后,您需要确保您的模型是从\Phalcon\Mvc\Collection 扩展的

例如客户.php

class Customers extends \Phalcon\Mvc\Collection
{
    public $name;
    public $email;
}

完成上述操作后,您可以验证一切是否正常,如下所示

$robot       = new Customers();
$robot->email= "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3a5b58597a4e5f494e14595557" rel="noreferrer noopener nofollow">[email protected]</a>";
$robot->name = "XYZ";
if ($robot->save() == false) 
{
echo "Could not be Saved!!";
}
else
{
echo "Data Saved!!";
}

您可以将上面的代码放在任何Controller-Action中并尝试。

如果一切顺利,您应该能够看到在 MongoDB 数据库的 Customer 集合中创建的一个文档。

引用http://docs.phalconphp.com/en/latest/reference/odm.html了解更多..

关于php - 如果我只想在 PhalconPHP 中使用 MongoDB,我应该对 db 使用什么设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333745/

相关文章:

php - phalcon 动态类创建失败并出现错误?

php - 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用而不是只有一个

php - 共享网络驱动器作为 Laravel 5.4 存储

php - 如果字段的值高于指定值,则更新 sql 表字段

javascript - 如何从 javascript 获取 Meteor 的 MongoDB URL

node.js - Node 中的 Mongodb 测试

php - 函数中的变量未传递给 php

php - 将 PHP 部署到 Heroku

javascript - 查询 MongoDB 的数据范围

post - 带有 JavaScript 确认对话框的 Phalcon PHP 发布链接