• yii2.0增删改查


    [php] view plain copy
     
    1. //关闭csrf  
    2. public $enableCsrfValidation = false;  
    [php] view plain copy
     
    1. 1.sql语句  
    2.   
    3. //查询  
    4.   
    5. $db=Yii::$app->db ->createCommand("select * from 表名") ->queryAll();  
    6.   
    7. //修改  
    8.   
    9. $db=Yii::$app->db ->createCommand()->update('表名',['字段名'=>要修改的值],'条件') ->execute();  
    10.   
    11. // 删除  
    12.   
    13. $db=Yii::$app->db ->createCommand() ->delete('表名','条件') ->execute();  
    14.   
    15.  //添加  
    16.   
    17. $db=Yii::$app->db ->createCommand() ->insert('表名',['字段名'=>要添加的值],'条件') ->execute();  



    
    

    //应用实例

        Customer::find()->one();    此方法返回一条数据;
    
        Customer::find()->all();    此方法返回所有数据;
    
        Customer::find()->count();    此方法返回记录的数量;
    
        Customer::find()->average();    此方法返回指定列的平均值;
    
        Customer::find()->min();    此方法返回指定列的最小值 ;
    
        Customer::find()->max();    此方法返回指定列的最大值 ;
    
        Customer::find()->scalar();    此方法返回值的第一行第一列的查询结果;
    
        Customer::find()->column();    此方法返回查询结果中的第一列的值;
    
        Customer::find()->exists();    此方法返回一个值指示是否包含查询结果的数据行;
        Customer::find()->asArray()->one();    以数组形式返回一条数据;
    
        Customer::find()->asArray()->all();    以数组形式返回所有数据;
        Customer::find()->where($condition)->asArray()->one();    根据条件以数组形式返回一条数据;
    
        Customer::find()->where($condition)->asArray()->all();    根据条件以数组形式返回所有数据;
        Customer::find()->where($condition)->asArray()->orderBy('id DESC')->all();    根据条件以数组形式返回所有数据,并根据ID倒序;
    
    3.关联查询    
        ActiveRecord::hasOne():返回对应关系的单条记录
    [php] view plain copy
     
    1. ActiveRecord::hasMany():返回对应关系的多条记录  

    应用实例
    [php] view plain copy
     
    1.     //客户表Model:CustomerModel   
    2.     //订单表Model:OrdersModel  
    3.     //国家表Model:CountrysModel  
    4.     //首先要建立表与表之间的关系   
    5.     //在CustomerModel中添加与订单的关系  
    6.         
    7.     Class CustomerModel extends yiidbActiveRecord  
    8.     {  
    9.     ...  
    10.       
    11.     public function getOrders()  
    12.     {  
    13.         //客户和订单是一对多的关系所以用hasMany  
    14.         //此处OrdersModel在CustomerModel顶部别忘了加对应的命名空间  
    15.         //id对应的是OrdersModel的id字段,order_id对应CustomerModel的order_id字段  
    16.         return $this->hasMany(OrdersModel::className(), ['id'=>'order_id']);  
    17.     }  
    18.        
    19.     public function getCountry()  
    20.     {  
    21.         //客户和国家是一对一的关系所以用hasOne  
    22.         return $this->hasOne(CountrysModel::className(), ['id'=>'Country_id']);  
    23.     }  
    24.     ....  
    25.     }  
    26.         
    27.     // 查询客户与他们的订单和国家  
    28.     CustomerModel::find()->with('orders', 'country')->all();  
    29.   
    30.     // 查询客户与他们的订单和订单的发货地址  
    31.     CustomerModel::find()->with('orders.address')->all();  
    32.   
    33.     // 查询客户与他们的国家和状态为1的订单  
    34.     CustomerModel::find()->with([  
    35.     'orders' => function ($query) {  
    36.         $query->andWhere('status = 1');  
    37.         },  
    38.         'country',  
    39.     ])->all();  

    注:with中的orders对应getOrders

    常见问题:

    1.在查询时加了->select();如下,要加上order_id,即关联的字段(比如:order_id)比如要在select中,否则会报错:undefined index order_id

    [php] view plain copy
     
    1. //查询客户与他们的订单和国家  
    2. CustomerModel::find()->select('order_id')->with('orders', 'country')->all();  

    findOne()和findAll():

    [php] view plain copy
     
    1. //查询key值为10的客户  
    2. $customer = Customer::findOne(10);  
    3. $customer = Customer::find()->where(['id' => 10])->one();  
    [php] view plain copy
     
    1. //查询年龄为30,状态值为1的客户  
    2. $customer = Customer::findOne(['age' => 30, 'status' => 1]);  
    3. $customer = Customer::find()->where(['age' => 30, 'status' => 1])->one();  
    [php] view plain copy
     
    1. //查询key值为10的所有客户  
    2. $customers = Customer::findAll(10);  
    3. $customers = Customer::find()->where(['id' => 10])->all();  
    [php] view plain copy
     
    1. //查询key值为10,11,12的客户  
    2. $customers = Customer::findAll([10, 11, 12]);  
    3. $customers = Customer::find()->where(['id' => [10, 11, 12]])->all();  
    [php] view plain copy
     
    1. //查询年龄为30,状态值为1的所有客户  
    2. $customers = Customer::findAll(['age' => 30, 'status' => 1]);  
    3. $customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();  

    where()条件:

    $customers = Customer::find()->where($cond)->all(); 

    $cond写法举例:

    [php] view plain copy
     
    1. //SQL: (type = 1) AND (status = 2).  
    2. $cond = ['type' => 1, 'status' => 2]   
    3.   
    4. //SQL:(id IN (1, 2, 3)) AND (status = 2)  
    5. $cond = ['id' => [1, 2, 3], 'status' => 2]   
    6.   
    7. //SQL:status IS NULL  
    8. $cond = ['status' => null]  

    [[and]]:将不同的条件组合在一起,用法举例:

    [php] view plain copy
     
    1. //SQL:`id=1 AND id=2`  
    2. $cond = ['and', 'id=1', 'id=2']  
    3.   
    4. //SQL:`type=1 AND (id=1 OR id=2)`  
    5. $cond = ['and', 'type=1', ['or', 'id=1', 'id=2']]  

    [[or]]:

    [php] view plain copy
     
    1. //SQL:`(type IN (7, 8, 9) OR (id IN (1, 2, 3)))`  
    2. $cond = ['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]  

    [[not]]:

    [php] view plain copy
     
    1. //SQL:`NOT (attribute IS NULL)`  
    2. $cond = ['not', ['attribute' => null]]  

    [[between]]: not between 用法相同

    [php] view plain copy
     
    1. //SQL:`id BETWEEN 1 AND 10`  
    2. $cond = ['between', 'id', 1, 10]  

    [[in]]: not in 用法类似

    [php] view plain copy
     
    1. //SQL:`id IN (1, 2, 3)`  
    2. $cond = ['in', 'id', [1, 2, 3]]  
    3.   
    4. //IN条件也适用于多字段  
    5. $cond = ['in', ['id', 'name'], [['id' => 1, 'name' => 'foo'], ['id' => 2, 'name' => 'bar']]]  
    6.   
    7. //也适用于内嵌sql语句  
    8. $cond = ['in', 'user_id', (new Query())->select('id')->from('users')->where(['active' => 1])]  

    [[like]]:

    [php] view plain copy
     
    1. //SQL:`name LIKE '%tester%'`  
    2. $cond = ['like', 'name', 'tester']  
    3.   
    4. //SQL:`name LIKE '%test%' AND name LIKE '%sample%'`  
    5. $cond = ['like', 'name', ['test', 'sample']]  
    6.   
    7. //SQL:`name LIKE '%tester'`  
    8. $cond = ['like', 'name', '%tester', false]  

    [[exists]]: not exists用法类似

    [php] view plain copy
     
    1. //SQL:EXISTS (SELECT "id" FROM "users" WHERE "active"=1)  
    2. $cond = ['exists', (new Query())->select('id')->from('users')->where(['active' => 1])]  

    此外,您可以指定任意运算符如下

    [php] view plain copy
     
    1. //SQL:`id >= 10`  
    2. $cond = ['>=', 'id', 10]  
    3.   
    4. //SQL:`id != 10`  
    5. $cond = ['!=', 'id', 10]  

    常用查询:

    [php] view plain copy
     
    1. //WHERE admin_id >= 10 LIMIT 0,10  
    2. p;     User::find()->select('*')->where(['>=', 'admin_id', 10])->offset(0)->limit(10)->all()  
    [php] view plain copy
     
    1.     //SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`     
    2.      $subQuery = (new Query())->select('COUNT(*)')->from('user');      
    3.      $query = (new Query())->select(['id', 'count' => $subQuery])->from('post');  
    [php] view plain copy
     
    1.   //SELECT DISTINCT `user_id` ...   
    2.      User::find()->select('user_id')->distinct();  

    更新:

    [php] view plain copy
     
    1. //update();  
    2. //runValidation boolen 是否通过validate()校验字段 默认为true   
    3. //attributeNames array 需要更新的字段   
    4. $model->update($runValidation , $attributeNames);    
    5.   
    6. //updateAll();  
    7. //update customer set status = 1 where status = 2  
    8. Customer::updateAll(['status' => 1], 'status = 2');   
    9.   
    10. //update customer set status = 1 where status = 2 and uid = 1;  
    11. Customer::updateAll(['status' => 1], ['status'=> '2','uid'=>'1']);  

    删除:

    [php] view plain copy
     
    1. $model = Customer::findOne($id);  
    2. $model->delete();  
    3.   
    4. $model->deleteAll(['id'=>1]);  

    批量插入:

    [php] view plain copy
     
    1.     Yii::$app->db->createCommand()->batchInsert(UserModel::tableName(), ['user_id','username'], [  
    2.     ['1','test1'],  
    3.     ['2','test2'],  
    4.     ['3','test3'],     
    5.     ])->execute();  

    查看执行sql

    [php] view plain copy
     
    1. //UserModel   
    2. $query = UserModel::find()->where(['status'=>1]);   
    3. echo $query->createCommand()->getRawSql();  
  • 相关阅读:
    数据库主从同步相关问题
    前端使用node.js的http-server开启一个本地服务器
    css中height 100vh的应用场景,动态高度百分比布局,浏览器视区大小单位
    通过浏览器F12开发工具快速获取别的网站前端代码的方法
    vue打包app嵌入h5,区分app进入和android,ios显示不同的下载链接
    vue实现验证码倒计时60秒的具体代码
    vue用hbuilderX打包app嵌入h5方式云打包和遇到的问题
    Cookie写不进去问题深入调查 https Secure Cookie
    vue配置手机通过IP访问电脑开发环境
    区块链名词解析:ICO、IFO、IEO和IMO,分别是什么呢?
  • 原文地址:https://www.cnblogs.com/liangzia/p/5937378.html
Copyright © 2020-2023  润新知