thimkphp mysql事务_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联

之所以从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 functiongrade(){/**

* // 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 = newTeacher;//教师表数据

$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 functionteacher(){return self::belongsTo("Teacher");

}

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

/**

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

}

数据库一对多关联操作

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

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

public functiongoods(){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','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 = newBrand();$brand->together($goodDate)->save($brandDate);

}

一对多关联删除

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

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值