ActiveRecord(活动记录)提供了面向对象接口,用以访问数据库中的数据。一个AR类关联一张数据表,通过操作实例化的AR类模型达到处理数据的目的。
1、创建数据模型,声明AR类:
在类中引用AR基类,实现tblName方法,绑定与之关联的数据表:
namespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord{ public static function tableName() { return 'tbl_user'; } }
注:如果应用中配置了多个数据库连接,且需给AR类使用不同的数据库连接(DB connection),可以重写覆盖yii\db\ActiveRecord::getDb()方法:
public static function getDb() { return \Yii::$app->dbN; //可设置名为dbN的应用组件 }
2、查询数据
AR 提供了两种方法来构建 DB 查询并向 AR 实例里填充数据:
- yii\db\ActiveRecord::find()
- yii\db\ActiveRecord::findBySql()
以上两个方法都会返回 yii\db\ActiveQuery 实例,该类继承自yii\db\Query。
$user1 = User::findOne($condition)/findAll($condition);//用来返回一个/所有ActiveRecord
实例
$user2 = User::findBySql($sql)
$user3 = User::find()
->where() // 添加查询条件
->one()/all() // 返回一条/所有数据
->count() // 返回记录的数量
->indexBy() // 根据索引的列的名称查询结果
->orderBy() // 添加排序规则
->select() // 挑选字段
->with() // 该查询应执行的关系列表
->asArray() //以数组形式获取数据
->batch(int $n) //一次提取n条数据
->each(int $n) //一次提取n条数据并逐一遍历
->sum() //返回指定列的总数
->average() //返回指定列的平均值
->min() //返回指定列的最小值
->max() //返回指定列的最大值
->scalar() //返回查询结果的第一行中的第一列的值
->column() //返回查询结果中的第一列的值
->exists() //返回一个值,该值指示查询结果是否有数据
3、操作数据
yii\db\ActiveRecord::save() //保存 yii\db\ActiveRecord::insert() //插入 yii\db\ActiveRecord::update() //更新 yii\db\ActiveRecord::delete() //删除
须知:save() 方法会调用 insert() 和 update() 中的一个, 用哪个取决于当前 AR 对象是不是新对象(在函数内部,他会检查 yii\db\ActiveRecord::isNewRecord 的值)。 若 AR 对象是由 new 操作符 初始化出来的,save() 方法会在表里插入一条数据; 如果一个 AR 是由 find() 方法获取来的, 则 save() 会更新表里的对应行记录。
数据输入与有效性验证
由于AR继承自yii\base\Model,所以它同样也支持Model的数据输入、验证等特性。例如,你可以声明一个rules方法用来覆盖掉yii\base\Model::rules()里的;你也可以给AR实例批量赋值;你也可以通过调用yii\base\Model::validate()执行数据验证。
当你调用 save()、insert()、update() 这三个方法时,会自动调用yii\base\Model::validate()方法。如果验证失败,数据将不会保存进数据库。