Welcome 微信登录

首页 / 数据库 / MySQL / Symfony通过DoctrineMongoDBODM访问MongoDB

一、概述开发环境:PHP 5.3.0+ / Symfony 1.4.4 / DoctrineMongoDBODM 1.0.0 / MongoDB 1.4.4阅读提示:本文需读者了解以下内容 PHP命名空间Symfony框架MongoDBDoctrine ODM下载ODM
Win平台MongoDB的安装与使用可参看:《PHP操作MongoDB》  http://www.linuxidc.com/Linux/2011-09/43907.htm二、配置与开发步骤
1、首先在命令行下创建Symfony项目,假设主目录为:ROOT,项目名为MG
>cd ROOT
>php lib/vendor/symfony/data/bin/symfony generate:project MG --orm=none 2、将下载的Doctrine ODM解压至ROOT/lib/vendor/doctrine/lib目录下,eg:ROOT/lib/vendor/doctrine/lib/Doctrine/ODM 3、在ROOT/lib下创建documents存放数据集模型,类似与表模型,同时创建Proxy的两个目录,分别为:generate和proxies(ROOT/lib/generate/proxies) 4、修改项目配置文件ROOT/config/ProjectConfiguration.class.php,代码如下:
  1. require_once dirname(__FILE__)  
  2.     ."/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php";  
  3. sfCoreAutoload::register();  
  4. require_once __DIR__  
  5.     ."/../lib/vendor/doctrine/lib/Doctrine/Common/ClassLoader.php";  
  6. use Doctrine/Common/CLassLoader;  
  7. class ProjectConfiguration extends sfProjectConfiguration  
  8. {  
  9.     public function setup()  
  10.     {  
  11.         $classLoader = new ClassLoader("Doctrine/ODM",   
  12.             __DIR__."/../lib/vendor/doctrine/lib");  
  13.         $classLoader->register();  
  14.         $classLoader = new ClassLoader("Doctrine/Common",   
  15.             __DIR__."/../lib/vendor/doctrine/lib");  
  16.         $classLoader->register();  
  17.         $classLoader = new ClassLoader("Documents",   
  18.             __DIR__."/../lib/documents");  
  19.         $classLoader->register();  
  20.     }  
  21. }  
5、在命令行下采用Symfony命令创建应用frontend和模块mg>php symfony generate:app frontend>php symfony generate:module frontend mg 6、在ROOT/lib/documents目录下创建三个文件:MongoDB操作类(Documents.class.php),用户数据集类似于用户表模型(Users.class.php),博客文章数据集类似于博客文章表模型(BlogPost.class.php),内容如下:
  1. //Documents.class.php   
  2. use Doctrine/Common/Annotations/AnnotationReader,  
  3.     Doctrine/ODM/MongoDB/DocumentManager,  
  4.     Doctrine/ODM/MongoDB/Mongo,  
  5.     Doctrine/ODM/MongoDB/Configuration,  
  6.     Doctrine/ODM/MongoDB/Mapping/Driver/AnnotationDriver;  
  7.       
  8. class Documents  
  9. {  
  10.     public static $dm = null;  
  11.       
  12.     public static function create()  
  13.     {  
  14.         if (is_null(self::$dm)) {  
  15.             $config = new Configuration();  
  16.             $config->setProxyDir(__DIR__."/../generate/proxies");  
  17.             $config->setProxyNamespace("Proxies");  
  18.             $reader = new AnnotationReader();  
  19.             $reader->setDefaultAnnotationNamespace("Doctrine/ODM/MongoDB/Mapping//");  
  20.             $config->setMetadataDriverImpl(new AnnotationDriver($reader, __DIR__));  
  21.             self::$dm = DocumentManager::create(new Mongo(), $config);  
  22.         }  
  23.         return self::$dm;  
  24.     }  
  25. }  
  26. //Users.class.php   
  27. class Users  
  28. {  
  29.     public $id;  
  30.     public $name;  
  31.     public $email;  
  32.     public $posts = array();  
  33. }  
  34. //Blogpost.class.php   
  35. class BlogPost  
  36. {  
  37.     public $id;  
  38.     public $title;  
  39.     public $body;  
  40.     public $createdAt;  
  41. }  
7、修改模块mg的action类(ROOT/apps/frontend/modules/mg/actions/actions.class.php)
  1. class mgActions extends sfActions  
  2. {  
  3.     public function executeIndex(sfWebRequest $request)  
  4.     {  
  5.         //新建数据集User对象   
  6.         $user = new Users();  
  7.         $user->name = "caleng";  
  8.         $user->email = "caleng@caleng.com";  
  9.         Documents::create()->persist($user);  
  10.           
  11.         //新建数据集Blogpost对象   
  12.         $post = new BlogPost();  
  13.         $post->title = "My First Blog Post";  
  14.         $post->body = "MongoDB + Doctrine 2 ODM";  
  15.         $post->createdAt = date("Y-m-d");  
  16.         $user->posts[] = $post;  
  17.         Documents::create()->flush();  
  18.           
  19.          //查找用户blog   
  20.         $userId = $user->id;  
  21.         $loadedUser = Documents::create()->find("Users"$userId);  
  22.         foreach ($loadedUser->posts as $post) {  
  23.             echo $post->title . PHP_EOL;  
  24.             echo $post->body . PHP_EOL;  
  25.             echo "By " . $loadedUser->name . " on " . $post->createdAt;  
  26.         }  
  27.     }  
  28. }  
至此Symfony操作MongoDB的简易示例已完成,启动MongoDB与Web服务器,在浏览器输入http://localhost/ROOT/web/index.php/mg,即可看到效果。深入内容请待后文或参看本文的教程链接。PHP操作MongoDBOracle 工具后台进程相关资讯      MongoDB 
  • MongoDB 3.3.0 发布下载  (01月14日)
  • 使用MongoDB C#官方驱动操作  (12/31/2015 16:27:56)
  • CentOS 6.6下安装MongoDB 3.0.1  (12/21/2015 19:29:02)
  • MongoDB 3.2版WiredTiger存储引擎  (01月02日)
  • 进程监控工具Supervisor 启动  (12/26/2015 10:49:57)
  • MongoDB 3.2.1 RC0 发布下载  (12/18/2015 11:32:29)
本文评论 查看全部评论 (0)
表情: 姓名: 字数