Phalcon 对象文档映射


在开始学习对象关系映射(Object Relational Mapper,ORM)和对象文档映射(Object Document Mapper,ODM)的概念之前,了解SQL和NoSQL数据库之间的区别很重要。

下表显示了SQL和NoSQL之间的区别:

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

Phalcon 具有映射 SQL 和 NoSQL 数据库的能力,这是在 NoSQL 数据库的对象文档映射器 (ODM) 和 SQL 数据库的对象关系映射器 (ORM) 的帮助下实现的。

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

对象文档映射(Object Document Mapper,ODM)


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

例子

步骤1: 创建一个名为 MongoDB 的数据库“test”,我们将使用此数据库进行映射:

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;
    }
}

输出如下所示:

Data Display