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 中配置项目,包括数据库连接。

// 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 与文档中的记录不匹配,则不会显示相应的输出,因为获取的记录数量是有限的。

Data Display
广告