yii2增删改查及AR的理解

yii2增删改查


// 返回 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,
]);


// 插入新客户的记录
$customer = new Customer();
$customer->name = ‘James‘;
$customer->email = ‘[email protected]‘;
$customer->save();

// 等同于 $customer->insert();

// 更新现有客户记录
$customer = Customer::findOne($id);
$customer->email = ‘[email protected]‘;
$customer->save();

// 等同于 $customer->update();

// 删除已有客户记录
$customer = Customer::findOne($id);
$customer->delete();

// 删除多个年龄大于20,性别为男(Male)的客户记录
Customer::deleteAll(‘age > :age AND gender = :gender‘, [‘:age‘ => 20, ‘:gender‘ => ‘M‘]);

// 所有客户的age(年龄)字段加1:
Customer::updateAllCounters([‘age‘ => 1]);

须知:save() 方法会调用 insert()update() 中的一个, 用哪个取决于当前 AR 对象是不是新对象(在函数内部,他会检查 yii\db\ActiveRecord::isNewRecord 的值)。
若 AR 对象是由 new 操作符 初始化出来的,save() 方法会在表里插入一条数据; 如果一个 AR 是由 find() 方法获取来的, 则 save()更新表里的对应行记录。

// 新建一条记录
$model = new Customer;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
// 获取用户输入的数据,验证并保存
}

// 更新主键为$id的AR
$model = Customer::findOne($id);
if ($model === null) {
throw new NotFoundHttpException;
}
if ($model->load(Yii::$app->request->post()) && $model->save()) {
// 获取用户输入的数据,验证并保存
}

对AR的理解

AR的生命周期

理解AR的生命周期对于你操作数据库非常重要。生命周期通常都会有些典型的事件存在。对于开发AR的behaviors来说非常有用。

当你实例化一个新的AR对象时,我们将获得如下的生命周期:

  1. constructor
  2. yii\db\ActiveRecord::init(): 会触发一个 yii\db\ActiveRecord::EVENT_INIT 事件

当你通过 find() 方法查询数据时,每个AR实例都将有以下生命周期:

  1. constructor
  2. yii\db\ActiveRecord::init(): 会触发一个 yii\db\ActiveRecord::EVENT_INIT 事件
  3. yii\db\ActiveRecord::afterFind(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_FIND 事件

当通过 yii\db\ActiveRecord::save() 方法写入或者更新数据时, 我们将获得如下生命周期:

  1. yii\db\ActiveRecord::beforeValidate(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE 事件
  2. yii\db\ActiveRecord::afterValidate(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_VALIDATE 事件
  3. yii\db\ActiveRecord::beforeSave(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_INSERT 或 yii\db\ActiveRecord::EVENT_BEFORE_UPDATE 事件
  4. 执行实际的数据写入或更新
  5. yii\db\ActiveRecord::afterSave(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_INSERT 或 yii\db\ActiveRecord::EVENT_AFTER_UPDATE 事件

最后,当调用 delete() 删除数据时, 我们将获得如下生命周期:

  1. yii\db\ActiveRecord::beforeDelete(): 会触发一个 yii\db\ActiveRecord::EVENT_BEFORE_DELETE 事件
  2. 执行实际的数据删除
  3. yii\db\ActiveRecord::afterDelete(): 会触发一个 yii\db\ActiveRecord::EVENT_AFTER_DELETE 事件
时间: 2024-10-21 21:22:09

yii2增删改查及AR的理解的相关文章

javascript相关的增删改查以及this的理解

前两天做了一个有关表单增删改查的例子,现在贴出来.主要是想好好说一下this. 下面贴一张我要做的表格效果. 就是实现简单的一个增删改查. 1.点击增加后自动增加一行: 2.点击保存当前行会将属性改成只读属性: 3.点击编辑会自动编辑,input的属性会变成可读可写属性: 4.点击删除会出现弹框,确定该条是否会删除. 下面贴出代码,不要很激动哦,哈哈! 提前说一下,代码是基于jquery以及bootstrap的,以下有用到该框架的js以及css HTML代码: <table class="

Struts2增删改查(自己思路理解)

1:查询所有: DAO层:把所有的信息都放到list集合中.然后返回. public List<Employee> getEmployees(){ return new ArrayList<Employee>(emps.values()); } Action层:把所有的数据放到request的Map中.然后页面显示的时候.取request中的值 private Map<String, Object> request; public void setRequest(Map

yii2-basic后台管理功能开发之二:创建CRUD增删改查

昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现基本的增删改查视图和操作. 1.创建数据库表 2.用gii生成model模型 3.用gii生成CRUD 需要注意的是CRUD生成的控制器的namespace,要和当前所在目录保持一致.否组路由会报错,找不到该页面等信息.

yii2 框架的 AR 和 DAO 增删改查

自己做个总结  方便以后查找使用 /** * yii 的增删改查 */ //增 public function add1($data) { $data = [ 'title'=>$data['YiiNews']['title'], 'msg'=>$data['YiiNews']['msg'], 'img'=>$data['News']['img'], ]; $this->setAttributes($data) ; return $this->insert(); } publ

Yii2.0高级框架数据库增删改查的一些操作(转)

yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 ----------------------------------------------------------------------------------------------------- User::find()->all();    //返回所有用户数据:User::findOne($id);   //返回 主键 id=1  的一条数

Yii2.0高级框架数据库增删改查的一些操作

yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 ----------------------------------------------------------------------------------------------------- User::find()->all();    //返回所有用户数据:User::findOne($id);   //返回 主键 id=1  的一条数

Oracle网络公开课《蛋炒饭,最简单也最困难——我理解的Oracle增删改查与你不同》

2014年4月18日是<舌尖2>开播的日子(正好是这次网络课的三个月前),吃货们早早准备,连某冰冰也发了这样的微博:"据说今儿晚上不吃饱不能打开电视机,重大杀器<舌尖上的中国>正在出没.嘿嘿,我已经准备好充足的零食,麻溜地坐电视机前了,你呢?" 本节课主要谈和吃有关的话题. 本课主要通过回顾两部电影和纪录片--<食神>和<舌尖上的中国2>,来谈谈如何对百万行以上数据进行增删改查的操作,这些操作和本课的标题一样--蛋炒饭,最简单也最困难,是

网络公开课_我理解的Oracle增删改查与你不同

您好, Beijing Shennao 邀请您出席使用 WebEx 的网络研讨会. 主题:网络公开课_我理解的Oracle增删改查与你不同 主持人:Beijing Shennao 日期与时间: 2014年7月18日 19:30, 中国时间(北京,GMT+08:00) 活动密码:321321 ------------------------------------------------------- 要加入该在线活动 ---------------------------------------

yii2.0增删改查实例讲解

yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `texture` varchar(50) NOT NULL COMMENT '材质', `mark` varchar(50) NOT NULL COMMENT '牌号', `manufacturers` varchar(100) NOT NULL COMMENT '厂家', `price` int(11) NO