サマリー:<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/15 * Time: 19:31 */ //控制器名稱和模型及數(shù)據(jù)庫同名稱 namespace&nbs
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2019/4/15 * Time: 19:31 */ //控制器名稱和模型及數(shù)據(jù)庫同名稱 namespace app\index\controller; use think\Controller; //引入控制器 use app\index\model\Staff as StaffModel; use think\model\concern\SoftDelete; //導(dǎo)入模型,發(fā)現(xiàn)模型和控制器名稱重名,別名處理:Staff as StaffModel class Staff extends Controller { //實(shí)例化模型 public function instance(StaffModel $staff) //依賴注入 { // $staff = new StaffModel(); //模型實(shí)例化 dump($staff->getName()); //查看模型名稱 //新增一條記錄 $staff ->name = '學(xué)習(xí)'; $staff ->sex = 0; $staff -> age =36; $staff ->salary = 5000; //新增操作 $staff -> save(); return '新增成功,id='.$staff->staff_id; //實(shí)際開發(fā)中,都是用靜態(tài)方法完成模型操作的 } //模型查詢 public function query() { //1.單條記錄:get(主鍵/閉包) //閉包就是匿名回調(diào)函數(shù),將函數(shù)作為參數(shù)進(jìn)行傳遞 //通過查詢來創(chuàng)建模型 $staff = StaffModel::get(2); dump($staff); //系統(tǒng)預(yù)處理查看數(shù)組 echo '<hr>'; \var_dump($staff); //調(diào)用系統(tǒng)函數(shù)查看顯示對象 echo '<hr>'; echo $staff['name'],'<br>'; //用數(shù)組的方式獲取值 echo $staff->name,'<br>'; //用對象的方式獲取值 //用閉包來查詢條件 $staff = StaffModel::get(function ($query){ $query->where('sex',0)->where('salary','>','7000'); }); echo '性別為男,工資大于8000的數(shù)據(jù):'; dump($staff); echo '<hr>'; //直接靜態(tài)調(diào)用Db類的查詢構(gòu)造器進(jìn)行查詢 // StaffModel == Db::table('staff') StaffModel::where('sex',0) ->where('salary','>',8000) ->find(); dump($staff); echo '<hr>'; //2.多條記錄的查詢:all(主鍵列表/閉包) //返回值是多維數(shù)組/對象數(shù)組 // $staff = StaffModel::all(); //查詢到所有數(shù)據(jù): SELECT * FROM `staff` // $staff = StaffModel::all([1,2,3]); //獲取到的是主鍵等于1,2,3的3條數(shù)據(jù): SELECT * FROM `staff` WHERE `staff_id` IN (1,2,3) // $staffs = StaffModel::all(function ($query) // { // $query->where('age','<',40) // ->where('salary','<',6000); // }); // SELECT * FROM `staff` WHERE `age` < 40 AND `salary` < 6000 // dump($staffs); //用foreach遍歷 // foreach ($staffs as $staff) // { // echo '姓名:'.$staff->name.'<br>'; // echo '性別:'.$staff->sex.'<br>'; // echo '年齡:'.$staff->age.'<br>'; // echo '工資:'.$staff->salary.'<hr>'; // } //采用閉包將變量注入到閉包條件中 // $this->request === new \think\facade\Request; //請求對象 $age = $this->request->param('age') ? : 40; $salary = $this->request->param('salary') ? : 5000; $staffs = StaffModel::all(function ($query) use ($age,$salary) { $query->where('age','<',$age) ->where('salary','<',$salary); }); //用foreach遍歷 // foreach ($staffs as $staff) // { // echo '姓名:'.$staff->name.'<br>'; // echo '性別:'.$staff->sex.'<br>'; // echo '年齡:'.$staff->age.'<br>'; // echo '工資:'.$staff->salary.'<hr>'; // } dump($staffs); } //模型更新 public function update(){ //基于前置條件查詢的,不允許無條件更新 // $staff =StaffModel::get(3); //條件查詢出數(shù)據(jù) // $staff ->name = '無忌哥哥'; //更新字段內(nèi)容 // $staff ->save(); //私有方法,將數(shù)據(jù)寫回到數(shù)據(jù)庫 //建議用靜態(tài)方法:update(數(shù)據(jù),條件,字段) StaffModel::update( ['name'=>'張無忌'], ['staff_id'=>3] ); //復(fù)雜更新 //將年齡大于50的都加500 // StaffModel::update( // ['salary'=>\think\Db::raw('salary+500')], // function ($query){ // $query->where('age','>=',50); // } // ); //也可以使用查詢構(gòu)造器來更新數(shù)據(jù) StaffModel::where('age','>',50) ->data(['salary'=>\think\Db::raw('salary+500')]) ->update(); } //創(chuàng)建模型:添加數(shù)據(jù) public function create() { //1.save() //2.create(數(shù)據(jù),字段) $data =[ 'name'=>'孫唐22', 'sex'=>0, 'age'=>999, 'salary'=>8888 ]; // $field = ['name','sex','age','salary']; // $field = ['name','sex']; // StaffModel::create($data,$field); //不允許添加的數(shù)據(jù)會調(diào)用默認(rèn)值 //3.用查詢構(gòu)造器來插入數(shù)據(jù) StaffModel::insert($data); } //模型刪除:刪除記錄 public function delete() { //destroy(主鍵/主鍵列表/閉包) // StaffModel::destroy(32); //先查詢再刪除2條sql語句 // StaffModel::destroy([1,5,6]); //先查詢再刪除2條sql語句 //刪除條件推薦使用閉包 StaffModel::destroy(function ($query){ $query->where('age','>',55) ->where('salary','>=',5000); }); //執(zhí)行結(jié)果: SELECT * FROM `staff` WHERE `age` > 55 AND `salary` >= 5000 //查詢構(gòu)造器實(shí)現(xiàn)刪除 StaffModel::where('age','>',50) ->delete(); //DELETE FROM `staff` WHERE `age` > 50 } //軟刪除:必須在模型中進(jìn)行配置,用更新模擬刪除 public function softDelete() { // StaffModel::destroy(29); //軟刪除在普通查詢中不可見 // $res =StaffModel::where('staff_id < 5')->select(); //查看含有被軟刪除的記錄 // $res =StaffModel::withTrashed()->where('staff_id < 5')->select(); //查看已被軟刪除的記錄 $res =StaffModel::onlyTrashed()->select(); dump($res); } //軟刪除的記錄的恢復(fù) public function softRestore(){ $res = StaffModel::onlyTrashed()->find(29); $res->restore(); //執(zhí)行結(jié)果SQL:UPDATE `staff` SET `delete_time` = 0 WHERE ( `staff_id` = 28 ) AND `delete_time` <> 0 } }
數(shù)據(jù)庫查詢操作是基礎(chǔ),更新和刪除必須要有前置查詢條件,刪除操作一般都用軟刪除來更新到回收站,在回收站再用物理刪除徹底刪除。
添削の先生:查無此人添削時間:2019-04-18 09:47:24
先生のまとめ:完成的不錯。數(shù)據(jù)庫一般是不刪除數(shù)據(jù)的,所有數(shù)據(jù)都要保留。繼續(xù)加油。