Phalcon - 对象文档映射器


在开始了解对象关系映射器(ORM) 和对象文档映射器 (ODM)的概念之前,了解 SQL 和 NoSQL 数据库之间的区别非常重要。

下表重点介绍了 SQL 和 NoSQL 之间的差异 -

SQL NoSQL
它们也称为关系数据库 (RDBMS) 它们被称为非关系型或分布式数据库
数据库的结构由表和视图构成 它由基于文档的数据库和图形数据库组成
它包括预定义的架构 它有一个动态模式
它对于定义和操作数据非常强大 它在维护数据作为文档集合方面功能强大

Phalcon 能够与 SQL 和 NoSQL 数据库进行映射。这是在 NoSQL 数据库的对象文档映射器 (ODM) 和 SQL 数据库的对象关系映射器 (ORM) 的帮助下实现的。

在 Phalcon 中,ORM 概念包括创建与给定表名关联的模型,正如我们在前面的章节中看到的那样。它遵循所有引用完整性约束。

对象文档映射器 (ODM)

它是与NoSQL数据库关联的对象。顾名思义,它映射文档相关模块。Phalcon 使用它来映射 MongoDB 等数据库。

例子

步骤 1 - 创建名为“test”的 MongoDB 数据库。我们将使用该数据库进行映射并获得适当的响应。

测试

蒙戈

步骤 2 - 检查数据库中插入的记录。与之相关的命令是 -

db.collection.find() 

插入记录

可以看出,每个文档都映射有ObjectId,这是ODM 的一个功能。ObjectId的值是唯一的,稍后用于获取与该特定 ID 相关的所有存储数据。

步骤 3 - 为创建的数据库设置模型。模型是一个扩展Phalcon\Mvc\Collection的类。Test.php模型将包含以下代码。

<?php 
use Phalcon\Mvc\Collection;  

class Test extends Collection { 
   public function initialize() { 
      $this->setSource("test"); 
   } 
} 

步骤 4 - 配置项目,包括services.php中的数据库连接。

// Simple database connection to localhost 

$di->set( 
   "mongo", 
   function () { 
      $mongo = new MongoClient();  
      return $mongo->selectDB("test"); 
   }, 
   true 
); 

// Connecting to a domain socket, falling back to localhost connection 

$di->set( 
   "mongo", 
   function () { 
      $mongo = new MongoClient( 
         "mongodb:///tmp/mongodb-27017.sock,localhost:27017" 
      );  
      return $mongo->selectDB("test"); 
   }, 
   true 
);

步骤 5 - 在TestController.php的帮助下打印与ObjectId相关的值。

<?php  

use Phalcon\Mvc\Controller;  

class TestController extends Controller { 
   public function index() { 
      // Find record with _id = "5087358f2d42b8c3d15ec4e2" 
      $test = Test::findById("5819ab6cfce9c70ac6087821"); 
      echo $test->data; 
   } 
} 

输出将显示与 objectId 匹配的数据。如果 objectId 与文档中的记录不匹配,则在获取记录数时不会显示相应的输出。

数据显示