数据库访问与 ORM

在 CakePHP 中,通过数据库操作数据主要使用两种对象类型。

  • 资源库表对象提供对数据集合的访问。它们允许您保存新记录、修改/删除现有记录、定义关系以及执行批量操作。

  • 实体代表单个记录,允许您定义行/记录级别的行为和功能。

这两类通常负责管理与您的数据相关的大部分操作,包括数据的有效性、交互和工作域中信息工作流程的演变。

CakePHP 的内置 ORM 专注于关系型数据库,但可以扩展以支持其他数据源。

CakePHP ORM 借鉴了 ActiveRecord 和 Datamapper 模式中的想法和概念。它旨在创建一种混合实现,将两种模式的各个方面结合起来,以创建一个快速且易于使用的 ORM。

在开始探索 ORM 之前,请确保您已配置您的数据库连接.

快速示例

要开始,您无需编写任何代码。如果您已遵循CakePHP 数据库表的约定,您可以直接开始使用 ORM。例如,如果我们想从 articles 表中加载一些数据,我们将从创建我们的 Articles 表类开始。使用以下代码创建 src/Model/Table/ArticlesTable.php

<?php
namespace App\Model\Table;

use Cake\ORM\Table;

class ArticlesTable extends Table
{
}

然后,在控制器或命令中,我们可以让 CakePHP 为我们创建一个实例

public function someMethod()
{
    $resultset = $this->fetchTable('Articles')->find()->all();

    foreach ($resultset as $row) {
        echo $row->title;
    }
}

在其他情况下,您可以使用 LocatorAwareTrait,它会为 ORM 表添加访问器方法

use Cake\ORM\Locator\LocatorAwareTrait;

public function someMethod()
{
    $articles = $this->fetchTable('Articles');
    // more code.
}

在静态方法中,您可以使用 Cake\Datasource\FactoryLocator 获取表定位器

$articles = TableRegistry::getTableLocator()->get('Articles');

表类代表实体集合。接下来,让我们为我们的 Articles 创建一个实体类。实体类允许您定义访问器和修改器方法,为单个记录定义自定义逻辑等等。我们将从在 <?php 开头标签之后将以下内容添加到 src/Model/Entity/Article.php

namespace App\Model\Entity;

use Cake\ORM\Entity;

class Article extends Entity
{
}

默认情况下,实体使用表名的单数驼峰式版本作为其类名。现在我们已经创建了实体类,当我们从数据库加载实体时,我们将获得我们新 Article 类的实例

use Cake\ORM\Locator\LocatorAwareTrait;

$articles = $this->fetchTable('Articles');
$resultset = $articles->find()->all();

foreach ($resultset as $row) {
    // Each row is now an instance of our Article class.
    echo $row->title;
}

CakePHP 使用命名约定将表和实体类联系起来。如果您需要自定义表使用的实体,可以使用 entityClass() 方法来设置特定的类名。

有关如何在应用程序中使用表对象和实体的更多信息,请参见有关表对象实体的章节。

更多信息