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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
php中设置多级目录session的问题
Aug 08 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 PHP
PHP超级全局变量数组小结
Oct 04 PHP
php如何调用webservice应用介绍
Nov 24 PHP
php常用Stream函数集介绍
Jun 24 PHP
php中数字0和空值的区别分析
Jun 05 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
PHP预定义超全局数组变量小结
Aug 20 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验证是否是md5编码的简单代码
2014/04/01 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
jquery实现拖动效果
2016/08/10 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python提示No module named images的解决方法
2014/09/29 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
pandas的resample重采样的使用
2020/04/24 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
哈理工毕业生的求职信
2013/12/22 职场文书
房屋租赁意向书
2014/04/01 职场文书
学生干部培训方案
2014/06/12 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
会议主持人开场白台词
2015/05/28 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers