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();
}
總結
以上是生活随笔為你收集整理的mysql 一对一关联查询_学习ThinkPHP的第20天--MySQL事务操作、查询事件、一对一关联...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oraclesqldeveloper 批
- 下一篇: mysql兼容性高吗_MySQL与标准的