1. 程式人生 > >ThinkPHP5-模型和關聯操作

ThinkPHP5-模型和關聯操作

模型和關聯操作:表對應一個模型、欄位對應一個屬性操作類的物件時就等於操作某一張表的記錄命名規則:指定類名對應指定資料表名下劃線的標明對應駝峰式命名的類如果類名和標明不相關,但是想操作那張表:那麼可以用protected $name = 'data'; //來確定表名protected $table = 'think_data'; //或者直接設定帶字首的表名類名首字母必須大寫名稱空間:namespace app\index\model;use think\Model;class Users extends Model{protected $name = 'xxx';}TIPS:Model的檔名必須為資料表的表名;(除了使用protected改變表名的方法打破規則)//但是專案中會引起歧義,不推薦使用且要在controller裡用到model,必須use\index\model\表名;來使用;TIPS:如果不是主鍵的id,使用get(id)資訊,只能獲取到id=1的資料;$user->save(); //新增;在save前對資料庫欄位進行賦值(相當於insert),完成對類的操作達到對錶的操作例:$user = new User; //要進行此操作必須要在控制器裡先use;$user->name = 'fate'; //對欄位進行賦值;$user->save(); //使用save()方法,做插入操作(insert);//呼叫靜態的create方法例(另一種方法):$user['n_info'] = 'wait';$user['password'] = '123'; //使用陣列來新增表資料if($result = User::create($user)){ //使用create方法對陣列insertecho $result->n_info.$result->password;}//關於批量新增(Alllist的方式):原理是利用迴圈insert插入 $user = new Demo(); $list = [ ['n_password' => '111','n_info' => 'CMS'], ['n_password' => '222','n_info' => 'SMC'], ]; if($user->saveAll($list)){ echo '新增成功'; }//查詢(指定欄位)$user = Users::get(1);echo $user->n_info;//查詢(制定欄位):將類的屬性當做陣列來訪問 $user = Demo::get(62); echo $user['n_password'];//非常有用的方法來查詢//根據某個條件查詢資料getByXxxx()方法$user = Demo::getByN_info('CMS'); //通過查詢到n_info=CMSecho $user['n_password']; //再拿到上述規則下的n_password資料//查詢資料$user1 = Demo::where(['n_info' => 'secoend'])->find();print_r($user1);當資料已經存在(被查出來後),save()就會執行update操作//對於資料庫查詢出來的資料,更新資料 $user = Demo::get(2); $user->n_password = '123'; $user->n_info = 'none1'; if(false !== $user->save()){ return '更新成功'; }else{ return $user->getError(); }//但是,如果想要對查詢出的資料進行插入,而不是更新(save)那麼:if(false !== $user->isUpdate(false)->save()){...}else{...}; //新增資料 $user = Demo::get(1); $user->n_info = 'fucxk'; $user->n_password = '0'; $user->id = null; if(false !== $user->isUpdate(false)->save()) return '新增成功'; else return '失敗';這是在查詢資料的基礎上新增資料,如果有允許為NULL的欄位,那麼欄位內容新增為get(i)中i的欄位//TIPS:到底是insert還是update取決於isUpdate的屬性,當isUpdate為false時,做insert處理,當isUpdate為true時,做update處理;自定義資料更新操作:$userArr['n_info'] = 'qwer'; $userArr['n_password'] = '0123'; Demo::update($userArr,['id' => 2]); //條件為id是2//在use了Demo的model後,直接呼叫update方法(TIPS:這裡如果設定0為首字元,那麼會被資料庫預設忽略掉)//刪除操作 $user = Demo::get(23); $user->delete();//更簡單的刪除操作Demo::destroy(24); //destroy裡為id值且在刪除後重新整理頁面,頁面不會報錯總結:controller的類名和表名沒有任何關係,而model的表名必須和類名一致,且未駝峰法命名controller需要使用model裡的表方法來操作資料表時,需要use app\index\model駝峰法表名;model中,可以用protected來設定表名和其他屬性;兩種方法通過對類的操作達到資料庫的操作(新增):1、使用save方法;2、使用create方法;一個模型對應一個數據表;表裡為下劃線,類裡為駝峰式命名;要使用model,需先拿名稱空間:namespace app\index\model;再拿到到父類的空間use think\Model;使用save自動插入資料庫操作;使用saveAll(陣列),實現批量插入;根據某個條件來查詢資料庫(更簡單的方法)$user = Demo::getByN_info('CMS');//查詢多個數據$list = Demo::all(); foreach ($list as $value){ echo 'id:'.$value->id.'info'.$value->n_info; }從資料庫裡查詢處的資料,使用save方法為update操作;可利用此特性改變任意值使用if(false !== $user->isUpdate(false)->save())的isupdate判斷來修改isupdate的值,達到新增功能;使用刪除操作$user = Demo::get(1);$user->delete;更簡便的刪除操作Demo::destroy(1);