Yii2文档–活动记录1

Active Record (活动记录,以下简称AR)提供了一个面向对象的接口, 用以访问数据库中的数据。一个 AR 类关联一张数据表, 每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性Attribute)映射到数据行的对应列。 一条活动记录(AR对象)对应数据表的一行,AR对象的属性则映射该行的相应列。

  • 声明 AR 类

要想声明一个 AR 类,你需要扩展 yii\db\ActiveRecord 基类, 并实现tableName()方法,返回与之相关联的的数据表的名称:

namespace app\models;
use yii\db\ActiveRecord;
class Customer extends ActiveRecord
{
    /**
     * @return string 返回该AR类关联的数据表名
     */
    public static function tableName()
    {
        return 'customer';
    }
}
  • 查询数据find()、findBySql()

返回 yii\db\ActiveQuery 实例,该类继承自yii\db\Query

// 取回所有活跃客户(状态为 *active* 的客户)并以他们的 ID 排序:
$customers = Customer::find()->where(['status' => Customer::STATUS_ACTIVE])
    ->orderBy('id')->all();

// 返回ID为1的客户:
$customer = Customer::find()->where(['id' => 1])->one();

// 取回活跃客户的数量:
$count = Customer::find()->where(['status' => Customer::STATUS_ACTIVE])->count();

// 以客户ID索引结果集:
$customers = Customer::find()->indexBy('id')->all();
// $customers 数组以 ID 为索引

// 用原生 SQL 语句检索客户:
$sql = 'SELECT * FROM customer';
$customers = Customer::findBySql($sql)->all();

findOne()和findAll()用来返回一个或者一组ActiveRecord实例

// 返回 id 为 1 的客户
$customer = Customer::findOne(1);

// 返回 id 为 1 且状态为 *active* 的客户
$customer = Customer::findOne(['id' => 1,'status' => Customer::STATUS_ACTIVE,]);

// 返回id为1、2、3的一组客户
$customers = Customer::findAll([1, 2, 3]);

// 返回所有状态为 "deleted" 的客户
$customer = Customer::findAll(['status' => Customer::STATUS_DELETED,]);
/ 以数组而不是对象形式取回客户信息:
$customers = Customer::find()->asArray()->all();
// $customers 的每个元素都是键值对数组
  • 批量获取数据
// 一次提取 10 个客户信息
foreach (Customer::find()->batch(10) as $customers) {
    // $customers 是 10 个或更少的客户对象的数组
}
// 一次提取 10 个客户并一个一个地遍历处理
foreach (Customer::find()->each(10) as $customer) {
    // $customer 是一个 ”Customer“ 对象
}
// 贪婪加载模式的批处理查询
foreach (Customer::find()->with('orders')->each() as $customer) {
}
  • 读取默认值

你的表列也许定义了默认值。有时候,你可能需要在使用web表单的时候给AR预设一些值。如果你需要这样做,可以在显示表单内容前通过调用loadDefaultValues()方法来实现:

$customer = new Customer();
$customer->loadDefaultValues();
// ... 渲染 $customer 的 HTML 表单 ...

留下评论