之所以从20天才开始写随笔记是因为之前没搞自己的博客

从20天开始记录我在ThinkPHP中的点点滴滴

1、MySQL事务操作


/**事务操作*/
//startTrans启动事务、rollback回调、commit提交
//使用场景:交易系统
Db::startTrans();
$row = Db::name("users")->dec('count',50)->where('userID',28)->update();
if($row !== false){
$row1 = Db::name("users")->inc('count',50)->where('userID',13)->update();
if($row1!==false){
$result = Db::name("users")->field('count')->where('userID',28)->find();
if ($result['count']>=0){
Db::commit();//提交事务,交易成功
echo "交易成功!!!";
}else{
Db::rollback();
echo "交易失败,您的余额已不足请及时充值!!!";
}
}else{
Db::rollback();//回调,交易失败
echo "交易失败!!!";
}
}else{
Db::rollback();//交易失败
echo "交易失败!!!";
}

2、ThinkPHP查询事件

 //在执行数据库操作触发的事件,如在查询数据前插入一条数据
//1、查询前回调:before_select 、before_find
//2、插入成功后回调:after_insert
//3、更新成功后回调:after_update
//4、删除成功后回调:after_delete
// 注册一个事件,查询之前调用add方法
Db::event('before_select',[$this,'add']);
$data = Db::name("users")->select();
dump($data);
// add方法
public function add(){
$date = [
'userName' => '小铭',
'password' => 'MingGyGy'
];
$siz = Db::name("users")->insert($date);
dump($siz);
/*$result = Db::name("users")->data($date)->where("userID","=",21)->update();
dump($result);*/
}

3、ThinkPHP关联数据库操作

  一对一关联(正向关联):

    1)关联查询

      老师表对应模型中的方法:

  //定义一个关联方法 使用对应的模型名称 对应的表名称
public function grade(){
/**
* // hasOne()方法
* 第一个参数是需要关联的模型名称
* 第二个参数是关联外键名称 默认为:表名_id
* 第三个参数是当前主键名称 默认自动获取,也可手动设置
*/
return $this->hasOne('Grade');
}

      控制器中的方法:

public function join(){  
$teache = Teacher::get(1); //得到教师表的对象
$grade = $teache->grade;//grade为对应的模型方法 获得班级的对象
echo $teache->name."老师所带的班级:".$grade->name.$grade->id."班";
}

    2)关联添加数据

public function join(){
//实例化教师表
$teacher = new Teacher;
//教师表数据
$tDate = [
"name" => "王富贵"
]; //班级表数据
$gDate = [
"Grade" => [
'id' => '1704',
'name' => '电商'
]
];
$teacher->together($gDate)->save($tDate);
}

    3)关联更新数据

public function join(){
$teacher = Teacher::get(4);
$teacher->name = "二哈";
//更新班级数据
$teacher->grade->name = '软件1701';
$teacher->together('grade')->save();
}

    4)关联删除数据

public function join(){
$teacher = Teacher::get(4);
$teacher->delete(); //删除老师数据
$teacher->grade->delete(); //删除班级数据
}

  反向关联

    班级表的模型中:

    

//反向关联
public function teacher(){
return self::belongsTo("Teacher");
}

    反向关联查询班级所对应的老师名称:

    

  /**
* 反向关联查询(其它的增、删、改操作与正向关联类似)
*/
publicfunction join(){
$teacher = Grade::get(1)->teacher;
echo $teacher->name;
}

  数据库一对多关联操作

  商品表为:Goods   品牌表为:Brand

  在操作一对多关联查询操作之前需要创建数据表所对应的模型,在Brand模型中加入goods方法,方法中的内容为return self::hasMany('Goods');//Goods为对应的模型名称或者说是商品模型类的名称。  

public function goods(){
return self::hasMany("Goods");
}

    一对多关联查询

public function join(){
$Breand = Breand::get(1)->goods; //Breand类中的goods方法,返回一个数据集
dump($Breand); //打印这个数据集
//如果要使用数据集里面的数据可用foreach()来遍历其中的数据集
foreach($Breand as $value){
echo "商品名称:".$value->goods_name;
}
}

    一对多关联条件查询

public function join(){
$obj = Brand::get(3);
$goods = $obj->goods()->where('price','<',1000)->field("goods_name")->select();
foreach (goods as $good){
echo "商品:".$good->goods_name;
}
}

一对多关联增加(单增加商品)

public function join(){
$goodDate=[
'goods_name' => 'Nubia Z20',
'price' => '2999'
];
$brand = Brand::get(4);
$brand->goods()->save($goodDate);
}

一对多关联增加(同步添加商品信息和品牌信息)

public function join(){
//定义Goods表数据
$goodDate = [
"goods" => [
"goods_name" => "Nubia X",
"price" => "2599"
]
];
//定义品牌表信息
$brandDate = [
"brand_name" => "Nubia"
];
$brand = new Brand();
$brand->together($goodDate)->save($brandDate);
}

一对多关联删除

public function join(){
$brand = Brand::get(1,'goods');
$brand->together('goods')->delete();
}

学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联的更多相关文章

  1. 第二百八十六节,MySQL数据库-MySQL事务操作(回滚)

    MySQL数据库-MySQL事务操作(回滚) 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性. 举例:有这样一张表 从表里可以看出张 ...

  2. MySQL事务操作

    在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作.因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION ...

  3. Java学习之路:2、Mysql 链接与查询

    1.事实上我发现有了php的功力在里面,学习java起来还是不是很费劲,只是java就没有面向过程这一说 package second; import java.sql.*;//导入 public c ...

  4. SQL学习笔记四(补充-2)之MySQL多表查询

    阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table depart ...

  5. SQL学习笔记四(补充-1)之MySQL单表查询

    阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录 ...

  6. SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序

    阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...

  7. jQuery学习笔记:整理一些常用的jQuery操作DOM事件

    1.attr() .removeAttr() .attr() 方法可以传入一个名值对的参数,也可以传入一个包含2个以上名值对的对象参数,例如: .attr('src','images/a.jpg'); ...

  8. mysql事务的开启

    mysql事务的开启 对于一个MYSQL数据库(InnoDB),事务的开启与提交模式无非下面这两种情况: 1>若参数autocommit=0,事务则在用户本次对数据进行操作时自动开启,在用户执行 ...

  9. MySQL——事务(transaction)简单总结

    简介: MySQL事务操作主要用于处理操作量大,复杂度高的数据,比如说,在人员管理系统中要删除一个人员,你既要删除他的基本资料,也要删除该人员的相关信息,如文章.信箱等.这些数据库操作语句就构成了一个 ...

随机推荐

  1. JavaScript入门经典(第7版)读书笔记

    断断续续看了十来天,终于看完了,还是学到些东西,这本书还是不错的,各方面都有涉及. 补充了下之前不完善的JS 知识 笔记一般只记必要的东西.‎ Table of Contents 1. JavaScr ...

  2. hexo搭建简易的博客网站

    0.环境检测 1.系统升级(图形更新) #update-manager 检测状态 2.检测升级(命令更新) #sudo apt update #sudo apt -y dist-upgrade 一.安 ...

  3. [深度学习][图像处理][毕设][笔记][安装环境][下载地址]安装VS2013、matconvnet、cuda、cudnn过程中产生的一些记录,2018.5.6号

    最近半个多月,被cuda等软件折磨的死去活来,昨天下午,终于安装好了环境,趁着matlab正在,在线下载VOT2016数据集,3点睡眼惺忪被闹醒后,睡不着,爬上来写这份记录. 先记录一下自己电脑的基本 ...

  4. (C#)WPF:LinearGradientBrush的使用

    在MSDN文档库里可以查到,Rectangle.Fill的类型是Brush.Brush是一个抽象类,凡是以Brush为基类的类都可作为Fill属性的值.Brush的派生类有很多: * SolidCol ...

  5. 领扣(LeetCode)移动零 个人题解

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作, ...

  6. Jmeter使用代理录制web

    Jmeter有录制功能,录制HTTPs需要增加一个证书配置,录制步骤如下: 1.打开jmeter,添加线程组.线程组右键,逻辑控制器>录制控制器 工作台 右键 非测试元件 >HTTP代理服 ...

  7. 使用OpenMP加快OpenCV图像处理性能 | speed up opencv image processing with openmp

    本文首发于个人博客https://kezunlin.me/post/7a6ba82e/,欢迎阅读! speed up opencv image processing with openmp Serie ...

  8. 报错:尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。

    问题: 在写windows服务时,发布后日志报错:尝试加载 Oracle 客户端库时引发 BadImageFormatException.如果在安装 32 位 Oracle 客户端组件的情况下以 64 ...

  9. 微信二维码添加logo

    生成带参数的二维码 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 目前有 ...

  10. 新闻实时分析系统-MySQL安装

    1.修改yum源 鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源改为国内的Yum源,这里选择使用比较多的阿里云源.具体修改方法可以参考此连接 2.在线安装mysql 通过yum在线mysq ...