- Phalcon 教程
- Phalcon - 主页
- Phalcon - 概述
- Phalcon - 环境设置
- Phalcon - 应用程序结构
- Phalcon - 功能
- Phalcon - 配置
- Phalcon - 控制器
- Phalcon - 模型
- Phalcon - 景观
- Phalcon - 路由
- Phalcon - 数据库连接
- Phalcon - 切换数据库
- Phalcon - 脚手架应用
- Phalcon - 查询语言
- Phalcon - 数据库迁移
- Phalcon - Cookie 管理
- Phalcon - 会话管理
- Phalcon - 多语言支持
- Phalcon - 资产管理
- Phalcon - 使用表单
- Phalcon - 对象文档映射器
- Phalcon - 安全功能
- Phalcon 有用资源
- Phalcon - 快速指南
- Phalcon - 有用资源
- Phalcon - 讨论
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 与文档中的记录不匹配,则在获取记录数时不会显示相应的输出。