Yii2数据库操作常用方法小结


Posted in PHP onMay 04, 2017

本文实例讲述了Yii2数据库操作常用方法。分享给大家供大家参考,具体如下:

查询:

// find the customers whose primary key value is 10
$customers = Customer::findAll(10);
$customer = Customer::findOne(10);
// the above code is equivalent to:
$customers = Customer::find()->where(['id' => 10])->all();
// find the customers whose primary key value is 10, 11 or 12.
$customers = Customer::findAll([10, 11, 12]);
$customers = Customer::find()->where(['IN','id',[10,11,12]])->all();
// the above code is equivalent to:
$customers = Customer::find()->where(['id' => [10, 11, 12]])->all();
// find customers whose age is 30 and whose status is 1
$customers = Customer::findAll(['age' => 30, 'status' => 1]);
// the above code is equivalent to:
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();
// use params binding
$customers = Customer::find()->where('age=:age AND status=:status')->addParams([':age'=>30,':status'=>1])->all();
// use index
$customers = Customer::find()->indexBy('id')->where(['age' => 30, 'status' => 1])->all();
// get customers count
$count = Customer::find()->where(['age' => 30, 'status' => 1])->count();
// add addition condition
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->andWhere('score > 100')->orderBy('id DESC')->offset(5)->limit(10)->all();
// find by sql
$customers = Customer::findBySql('SELECT * FROM customer WHERE age=30 AND status=1 AND score>100 ORDER BY id DESC LIMIT 5,10')->all();

修改:

// update status for customer-10
$customer = Customer::findOne(10);
$customer->status = 1;
$customer->update();
// the above code is equivalent to:
Customer::updateAll(['status' => 1], 'id = :id',[':id'=>10]);

删除:

// delete customer-10
Customer::findOne(10)->delete();
// the above code is equivalent to:
Customer::deleteAll(['status' => 1], 'id = :id',[':id'=>10]);

----------------使用子查询----------------------

$subQuery = (new Query())->select('COUNT(*)')->from('customer');
// SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');

----------------手写SQL-----------------------

// select
$customers = Yii::$app->db->createCommand('SELECT * FROM customer')->queryAll();
// update
Yii::$app->db->createCommand()->update('customer',['status'=>1],'id=10')->execute();
// delete
Yii::$app->db->createCommand()->delete('customer','id=10')->execute();
//transaction
// outer
$transaction1 = $connection->beginTransaction();
try {
  $connection->createCommand($sql1)->execute();
  // internal
  $transaction2 = $connection->beginTransaction();
  try {
    $connection->createCommand($sql2)->execute();
    $transaction2->commit();
  } catch (Exception $e) {
    $transaction2->rollBack();
  }
  $transaction1->commit();
} catch (Exception $e) {
  $transaction1->rollBack();
}

---------------主从配置----------------------

[
  'class' => 'yii\db\Connection',
  // master
  'dsn' => 'dsn for master server',
  'username' => 'master',
  'password' => '',
  // slaves
  'slaveConfig' => [
    'username' => 'slave',
    'password' => '',
    'attributes' => [
      // use a smaller connection timeout
      PDO::ATTR_TIMEOUT => 10,
    ],
  ],
  'slaves' => [
    ['dsn' => 'dsn for slave server 1'],
    ['dsn' => 'dsn for slave server 2'],
    ['dsn' => 'dsn for slave server 3'],
    ['dsn' => 'dsn for slave server 4'],
  ],
]

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
php中使用redis队列操作实例代码
Feb 07 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
8个必备的PHP功能开发
Oct 02 PHP
php基于openssl的rsa加密解密示例
Jul 11 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 PHP
Yii2中添加全局函数的方法分析
May 04 #PHP
Yii2表单事件之Ajax提交实现方法
May 04 #PHP
PHP经典实用正则表达式小结
May 04 #PHP
PHP实现的简单异常处理类示例
May 04 #PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 #PHP
PHP 无限级分类
May 04 #PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 #PHP
You might like
php与paypal整合方法
2010/11/28 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
js鼠标移动时禁止选中文字
2017/02/19 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python爬虫文件下载图文教程
2018/12/23 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
什么是属性访问器
2015/10/26 面试题
计算机本科生自荐信
2013/10/15 职场文书
酒店管理毕业生自我鉴定
2014/03/02 职场文书
任命书怎么写
2015/03/02 职场文书
银行催款通知书
2015/04/17 职场文书
工程款申请报告
2015/05/15 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏