模型是 CakePHP 应用程序的核心。它们使我们能够读取和修改数据。它们允许我们在数据之间建立关系,验证数据并应用应用程序规则。模型提供了创建控制器操作和模板所需的基石。
CakePHP 的模型由 Table
和 Entity
对象组成。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 行为,它将自动填充我们表的 created
和 modified
列。通过将我们的 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
属性,它控制如何通过 批量赋值 修改属性。
提示
可以使用终端生成 ArticlesTable
和 Article
实体类
bin/cake bake model articles
我们现在还不能对这个模型进行太多操作。接下来,我们将创建第一个 控制器和模板,以便我们能够与模型进行交互。