CMS 教程 - 创建第一个模型

模型是 CakePHP 应用程序的核心。它们使我们能够读取和修改数据。它们允许我们在数据之间建立关系,验证数据并应用应用程序规则。模型提供了创建控制器操作和模板所需的基石。

CakePHP 的模型由 TableEntity 对象组成。Table 对象提供对存储在特定表中的实体集合的访问。它们存储在 src/Model/Table 中。我们将要创建的文件将保存到 src/Model/Table/ArticlesTable.php 中。完成后的文件应如下所示

<?php
// src/Model/Table/ArticlesTable.php
declare(strict_types=1);

namespace App\Model\Table;

use Cake\ORM\Table;

class ArticlesTable extends Table
{
    public function initialize(array $config): void
    {
        parent::initialize($config);
        $this->addBehavior('Timestamp');
    }
}

我们已经附加了 Timestamp 行为,它将自动填充我们表的 createdmodified 列。通过将我们的 Table 对象命名为 ArticlesTable,CakePHP 可以使用命名约定来知道我们的模型使用 articles 表。CakePHP 还使用约定来知道 id 列是我们的表的 primary key。

注意

如果 CakePHP 在 src/Model/Table 中找不到对应文件,它将为您动态创建一个模型对象。这也意味着,如果您不小心将文件名写错(例如 articlestable.php 或 ArticleTable.php),CakePHP 将无法识别您的任何设置,而是使用生成的模型。

我们还将为我们的文章创建一个 Entity 类。实体代表数据库中的单个记录,并为我们的数据提供行级行为。我们的实体将保存到 src/Model/Entity/Article.php 中。完成后的文件应如下所示

<?php
// src/Model/Entity/Article.php
declare(strict_types=1);

namespace App\Model\Entity;

use Cake\ORM\Entity;

class Article extends Entity
{
    protected array $_accessible = [
        'user_id' => true,
        'title' => true,
        'slug' => true,
        'body' => true,
        'published' => true,
        'created' => true,
        'modified' => true,
        'user' => true,
        'tags' => true,
    ];
}

目前,我们的实体非常精简;我们只设置了 _accessible 属性,它控制如何通过 批量赋值 修改属性。

提示

可以使用终端生成 ArticlesTableArticle 实体类

bin/cake bake model articles

我们现在还不能对这个模型进行太多操作。接下来,我们将创建第一个 控制器和模板,以便我们能够与模型进行交互。