Yii2.0框架基础--数据查询之AR类方法一
ActiveRecord(活动记录)提供了面向对象接口,用以访问数据库中的数据。一个AR类关联一张数据表,通过操作实例化的AR类模型达到处理数据的目的。
1、创建数据模型,声明AR类:
在类中引用AR基类,实现tblName方法,绑定与之关联的数据表:
namespace appmodels; use yiidbActiveRecord; class User extends ActiveRecord{ public static function tableName() { return "tbl_user"; } }
注:如果应用中配置了多个数据库连接,且需给AR类使用不同的数据库连接(DB connection),可以重写覆盖yiidbActiveRecord::getDb()方法:
public static function getDb() { return Yii::$app->dbN; //可设置名为dbN的应用组件 }
2、查询数据
AR 提供了两种方法来构建 DB 查询并向 AR 实例里填充数据:
- yiidbActiveRecord::find()
- yiidbActiveRecord::findBySql()
以上两个方法都会返回 yiidbActiveQuery 实例,该类继承自yiidbQuery。
$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、操作数据
yiidbActiveRecord::save() //保存 yiidbActiveRecord::insert() //插入 yiidbActiveRecord::update() //更新 yiidbActiveRecord::delete() //删除
须知:save() 方法会调用 insert() 和 update() 中的一个, 用哪个取决于当前 AR 对象是不是新对象(在函数内部,他会检查 yiidbActiveRecord::isNewRecord 的值)。 若 AR 对象是由 new 操作符 初始化出来的,save() 方法会在表里插入一条数据; 如果一个 AR 是由 find() 方法获取来的, 则 save() 会更新表里的对应行记录。
数据输入与有效性验证
由于AR继承自yiiaseModel,所以它同样也支持Model的数据输入、验证等特性。例如,你可以声明一个rules方法用来覆盖掉yiiaseModel::rules()里的;你也可以给AR实例批量赋值;你也可以通过调用yiiaseModel::validate()执行数据验证。
当你调用 save()、insert()、update() 这三个方法时,会自动调用yiiaseModel::validate()方法。如果验证失败,数据将不会保存进数据库。
- 上一篇: Yii2 防止用户重复登录
- 下一篇: php 给对象私有及受保护的成员变量赋值的几种方法