🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
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()`方法。如果验证失败,数据将不会保存进数据库。