当前位置:  首页>> 技术小册>> Yii2框架从入门到精通(上)

5.2.3 创建ActiveRecord模型

在Yii2框架中,ActiveRecord是一种基于数据库表的面向对象编程(OOP)模式,它使得对数据库的操作更加直观和方便。通过继承Yii2的\yii\db\ActiveRecord类,你可以为你的数据库表创建模型类,这些模型类不仅封装了数据库表的数据,还提供了丰富的数据操作方法,如查询、插入、更新和删除等。在本章节中,我们将详细讲解如何创建和使用ActiveRecord模型。

5.2.3.1 理解ActiveRecord

在深入探讨如何创建ActiveRecord模型之前,首先需要理解ActiveRecord的基本概念。ActiveRecord模式的核心思想是,每个数据库表都对应一个类,这个类的实例对应于表中的一行数据。通过这个类,你可以很方便地操作对应的数据表,包括数据的查询、新增、更新和删除等。

Yii2的ActiveRecord类\yii\db\ActiveRecord实现了ActiveRecord模式,它提供了基本的CRUD(Create, Read, Update, Delete)操作以及关系查询等功能。通过继承这个类,你可以轻松地为你的数据库表创建模型。

5.2.3.2 创建ActiveRecord模型类

创建ActiveRecord模型类的过程相对简单,主要涉及到定义模型类并设置其属性与数据库表的映射关系。以下是一个基本的步骤指南:

1. 定义模型类

首先,你需要在你的应用程序的models目录下(或者你自定义的模型存放目录)创建一个新的PHP类文件。这个类需要继承\yii\db\ActiveRecord

例如,假设你有一个名为user的数据库表,你可以创建一个名为User的模型类:

  1. namespace app\models;
  2. use Yii;
  3. use yii\db\ActiveRecord;
  4. class User extends ActiveRecord
  5. {
  6. // 类的其他部分...
  7. }
2. 设置表名

默认情况下,Yii2的ActiveRecord模型会尝试将类名(去除命名空间部分,并将驼峰命名转换为下划线分隔)作为数据库表名。但如果你想要使用不同的表名,可以通过重写tableName()方法来实现。

  1. public static function tableName()
  2. {
  3. return '{{%user}}';
  4. }

这里使用了{{%tableName}}的格式,其中%tableName是一个占位符,Yii2会在查询时自动替换为实际的表名,并且支持表前缀的设置(在数据库配置中定义)。

3. 定义模型属性

虽然Yii2的ActiveRecord能够自动从数据库表中推断出属性,但通常建议在模型中明确声明这些属性,以便使用IDE的代码自动完成功能,以及提高代码的可读性和可维护性。

你可以通过定义类的公有属性或者getter和setter方法来声明这些属性。然而,对于大多数场景,Yii2的ActiveRecord会自动处理属性的映射,因此你通常不需要显式声明它们。

4. 规则与验证

在模型中,你可以定义验证规则来确保数据的正确性。这些规则通过重写rules()方法来定义。

  1. public function rules()
  2. {
  3. return [
  4. [['username', 'email'], 'required'],
  5. ['email', 'email'],
  6. ['username', 'unique', 'targetClass' => '\app\models\User', 'message' => 'This username has already been taken.'],
  7. ];
  8. }

在上面的例子中,我们定义了三条验证规则:usernameemail字段是必填的,email字段必须是有效的电子邮件地址,username字段在数据库中必须是唯一的。

5. 场景

Yii2的ActiveRecord还支持场景(Scenario)的概念,允许你在不同的上下文中应用不同的验证规则。通过定义scenarios()方法,你可以为模型指定不同的场景以及每个场景下需要应用的验证规则。

  1. public function scenarios()
  2. {
  3. $scenarios = parent::scenarios();
  4. $scenarios['create'] = ['username', 'email'];
  5. $scenarios['update'] = ['username', 'email'];
  6. return $scenarios;
  7. }

5.2.3.3 使用ActiveRecord模型

创建了ActiveRecord模型之后,你就可以在应用程序中使用它来操作数据库了。以下是一些常用的操作示例:

1. 查询数据
  1. // 查询所有用户
  2. $users = User::find()->all();
  3. // 使用条件查询
  4. $user = User::find()->where(['username' => 'example'])->one();
  5. // 使用链式调用
  6. $activeUsers = User::find()
  7. ->where(['status' => 1])
  8. ->orderBy('created_at DESC')
  9. ->limit(10)
  10. ->all();
2. 新增数据
  1. $user = new User();
  2. $user->username = 'newuser';
  3. $user->email = 'newuser@example.com';
  4. $user->save();
3. 更新数据
  1. $user = User::findOne(['id' => 1]);
  2. $user->email = 'updateduser@example.com';
  3. $user->save();
4. 删除数据
  1. $user = User::findOne(['id' => 1]);
  2. $user->delete();
  3. // 或者直接通过查询条件删除
  4. User::deleteAll(['status' => 0]);

5.2.3.4 总结

在本章节中,我们详细介绍了如何在Yii2框架中创建和使用ActiveRecord模型。通过继承\yii\db\ActiveRecord类,并设置表名、定义验证规则等,你可以轻松地为你的数据库表创建模型。这些模型不仅封装了数据库表的数据,还提供了丰富的数据操作方法,使得数据库操作变得更加简单和直观。希望本章内容能帮助你更好地理解和使用Yii2的ActiveRecord模式。