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 数据库。我们将使用此数据库进行映射并获得适当的响应。

Test Mongo

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

db.collection.find()
Inserted Records

可以观察到,每个文档都与 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 中配置项目,包括数据库连接。

// 简单的数据库连接到本地主机

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

// 连接到域套接字,回退到本地主机连接

$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() { 
      // 查找 _id = "5087358f2d42b8c3d15ec4e2" 的记录
      $test = Test::findById("5819ab6cfce9c70ac6087821"); 
      echo $test->data; 
   } 
} 

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

数据显示