之所以从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();
}