zoukankan      html  css  js  c++  java
  • 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 = 'james@example.com'; $customer->save();

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

    $id = $model->attributes['id'];

    Yii::$app->db->getLastInsertID()

    // 更新现有客户记录 $customer = Customer::findOne($id); $customer->email = 'james@example.com'; $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 对象是不是新对象(在函数内部,他会检查 yiidbActiveRecord::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. yiidbActiveRecord::init(): 会触发一个 yiidbActiveRecord::EVENT_INIT 事件

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

    1. constructor

    2. yiidbActiveRecord::init(): 会触发一个 yiidbActiveRecord::EVENT_INIT 事件

    3. yiidbActiveRecord::afterFind(): 会触发一个 yiidbActiveRecord::EVENT_AFTER_FIND 事件

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

    1. yiidbActiveRecord::beforeValidate(): 会触发一个 yiidbActiveRecord::EVENT_BEFORE_VALIDATE 事件

    2. yiidbActiveRecord::afterValidate(): 会触发一个 yiidbActiveRecord::EVENT_AFTER_VALIDATE 事件

    3. yiidbActiveRecord::beforeSave(): 会触发一个 yiidbActiveRecord::EVENT_BEFORE_INSERT 或 yiidbActiveRecord::EVENT_BEFORE_UPDATE 事件

    4. 执行实际的数据写入或更新

    5. yiidbActiveRecord::afterSave(): 会触发一个 yiidbActiveRecord::EVENT_AFTER_INSERT 或 yiidbActiveRecord::EVENT_AFTER_UPDATE 事件

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

    1. yiidbActiveRecord::beforeDelete(): 会触发一个 yiidbActiveRecord::EVENT_BEFORE_DELETE 事件

    2. 执行实际的数据删除

    3. yiidbActiveRecord::afterDelete(): 会触发一个 yiidbActiveRecord::EVENT_AFTER_DELETE 事件

  • 相关阅读:
    HDU 1078 FatMouse and Cheese (简单DP)
    HDU 1052 Tian Ji The Horse Racing (贪心)
    HDU 4432 Sum of divisors 第37届ACM/ICPC天津现场赛B题 (简单题)
    HDU 1079 Calendar Game (博弈)
    HDU 4438 Hunters 第37届ACM/ICPC 天津赛区现场赛H题(超级水的题目)
    php级联
    C++运算符重载
    C++循环语句
    C++类复制构造函数
    C++ struct,union和enum
  • 原文地址:https://www.cnblogs.com/xiong63/p/6553692.html
Copyright © 2011-2022 走看看