ThinkPHP5.0框架開發--第8章 TP5.0 模型

weixin_34162629發表於2018-03-19

ThinkPHP5.0框架開發--第8章 TP5.0 模型

第8章 TP5.0 模型

=================================================

今日學習

 

1、模型(model)

        

         資料模型

 

2、新建資料模型

        

         1) 手動新建

 

                   a、開啟前臺模組(C:\AppServ\www\tp5\application\index)

 

                            新建model目錄

 

                   b、在model目錄下 新建 User.php

 

                            // 宣告名稱空間

                            namespace app\index\model;

 

                            // 匯入系統的資料模型

 

                            use think\Model;

 

                            // 宣告user模型

 

                            class User extends Model{

                                    

                            }

 

         2) 命令新建

 

                   1) 切換到專案目錄

 

                            php think make:model app\index\model\Users

 

 

         3) 注意

 

                   1、資料模型的名字 建議大家跟資料庫名一致

 

                   2、如果資料庫名字和模型名不一致 可以設定表名

 

                            protected $table="";

 

                   3、如果表名(yzm_user),資料模型名 (YzmUser)

 

3、模型的例項化

        

         1、呼叫靜態方法

 

                   $res=User::get(1);

                   dump($res->toArray());

 

         2、例項化資料模型

 

                   $user=new User();

                   $res=$user::get(2);

                   dump($res->toArray());

 

         3、使用loader

 

                   $user=Loader::model("user");

                   $res=$user::get(3);

                   dump($res->toArray());

 

         4、使用助手函式

 

                   $user=model("user");

                   $res=$user::get(4);

                   dump($res->toArray());

 

 

4、查詢操作

        

         1、單條資料

 

             // get方法

                      // 使用數字

                      $res=User::get(1); // 預設主鍵

                      // 使用陣列

                      $res=User::get(["name"=>'yzmedu3']);  // 預設查詢使用者名稱

 

                      // 使用閉包函式

                      $res=User::get(function($query){

                                $query->where("id",15);

                      });

             // find方法

 

                      $res=User::where("id",13)->find();

        

         2、查詢多條資料

 

             // all

                       // 所有資料

                       $res=User::all();

 

                       // 字串

                       $res=User::all("1,2,3");

 

                       // 陣列

                       $res=User::all([5,6,7]);

 

                       // 陣列

 

                       $res=User::all(['pass'=>'123']);

 

                       // 閉包

 

                       $res=User::all(function($query){

                                $query->where("pass","123")

                                         ->whereOr("pass","456")

                                         ->order("id","desc");

                       });

 

             // select 和 all 基本類似

 

                            $res=User::select();

                            $res=User::limit(2)->select();

 

         3、獲取某個欄位和某列值

 

                   // 獲取某個值

                   $res=User::where("id",5)->value("name");

 

                   // 獲取某列值

 

                   $res=User::column("name","id");

 

         4、動態查詢

                   // 查詢出匹配到的第一條資料

                   // getBy欄位名

                   $res=User::getByAge('44');

                   dump($res->toArray());

 

5、增加操作

        

                               

         1、設定屬性

                   $user=new User();

             $user->name="yzmedu21";

             $user->pass="abc";

             $user->age=18;

             // 返回影響行數

             $user->save();

 

    2、通過data方法

                   $user=new User();

 

                   $user->data([

                            "name"=>"yzmedu22",

                            "age"=>"22",

                            "pass"=>"qwe",

                            ]);

 

             // 返回影響行數

             $user->save();

        

         3、例項化時

 

                   $user=new User([

                            "name"=>"yzmedu23",

                            "pass"=>'zxc',

                            "age"=>20

                            ]);

                   // 返回影響行數

                   $user->save();

                   // allowField 遮蔽掉資料庫中不存在的欄位

             $user->allowField(true)->save();

             // 指定插入資料庫的欄位

             $user->allowField(['name','age'])->save();

 

    4、獲取自增的ID

             // 獲取插入資料ID

             echo $user->id;

 

    5、增加多條資料

 

             $user=new User();

 

             $list=[

                       ['name'=>"yzmedu33","age"=>33],

                       ['name'=>"yzmedu34","age"=>34]

 

             ];

 

             $user->saveAll($list);

 

    6、create方法

             $user=User::create([

                       "name"=>"yzmedu35",

                       "age"=>35

                       ]);

 

 

6、刪除操作

 

         // $user=User::get(1);

         // 返回影響行數

         // dump($user->delete());

 

         // 刪除主鍵2

         $user=User::destroy(2);

 

         // 刪除主鍵3,4,5

         $user=User::destroy("3,4,5");

         $user=User::destroy([6,7,8]);

 

         // 刪除name

 

         $user=User::destroy(['name'=>"yzmedu23"]);

 

         // 刪除多個條件

 

         $user=User::destroy(['name'=>'yzmedu33','age'=>33]);

 

         // 使用閉包

 

         $user=User::destroy(function($query){

 

             $query->where("id","<","15");

         });

 

         // 刪除資料

 

         $user=User::where("id",">","19")->delete();

 

         dump($user);

 

7、修改操作

        

         // 設定欄位更新資料

 

              $user=User::get(15);

 

              $user->age=19;

 

              $res=$user->save();

 

         // 直接陣列修改

 

             $user=new User;

 

             $res=$user->save(

                 [

                     "pass"=>"qweasd",

                     "age"=>16,

                    

                 ],["id"=>16]);

 

         // 修改資料

 

             $_POST['name']="yzmedu55";

             $_POST['pass']="pass55";

             $_POST['age']="55";

             $_POST['sex']="nan";

             $_POST['id']=17;

 

             $user=new User;

 

             $res=$user->allowField(['name','pass','age'])->save($_POST,['id'=>17]);

 

         // 批量更新

 

 

             $data=[

                 ['id'=>15,'name'=>"abc",'pass'=>456],

                 ['id'=>17,'name'=>"abc",'pass'=>456],

             ];

 

             $user=new User;

 

             $res=$user->saveAll($data);

 

             echo User::getLastSql();

 

         // 更新操作

 

             $user=new User;

 

             $res=$user->where("id",'>','17')->update(['age'=>18]);

 

             $res=User::where("id","<","18")->update(['pass'=>'zxc']);

 

         // 閉包更新資料

 

             $user=new User;

 

             $res=$user->save(['name'=>'yunzhimeng'],function($query){

                 $query->where("id","15");

             });

 

8、聚合

        

         // 統計資料條數

         $tot=User::count();

 

         dump($tot);

 

         // 條件判斷

         $tot=User::where("age",">",18)->count();

         dump($tot);

 

         // 統計最大值

 

         $max=User::max('age');

 

         dump($max);

 

         // 統計最小值

 

         $min=User::min("age");

 

         dump($min);

 

         // 平均值

         $avg=User::avg('age');

 

         dump($avg);

 

         // 求和

         $sum=User::sum('age');

         dump($sum);

 

 

9、獲取器

        

         1、資料模型

 

                   // sex 的獲取器

                   public function getSexAttr($val){

                            switch ($val) {

                                     case '0':

                                               return "未知";

                                               break;

                                     case "1":

                                               return "男";

                                               break;

                                     case "2":

                                               return "女";

                                               break;

                            }

                   }

 

 

         2、控制器

 

                   // 獲取ID為15 的資料

                   $user=User::get(17);

 

                   // 經過獲取器的操作

                   dump($user->toArray());

                   dump($user->sex);

 

                   // 不經過獲取器處理

                   dump($user->getData());

 

 

         3、注意

 

                   1、如果欄位 user_status 修改器名字getUserStatusAttr

                   2、如果欄位 status 修改器名字getStatusAttr

 

 

10、修改器

         1、資料模型

 

                   // 使用者密碼的修改器

 

                   public function setPassAttr($val){

 

                            return md5($val);

                   }

 

 

         2、控制器

 

                   // 修改 ID 為15 的密碼

 

                   $user=new User();

 

                   // 密碼會實現自動加密

                   $res=$user->save(['pass'=>'456'],['id'=>15]);

 

                   dump($res);

 

 

         3、注意

 

                   1、修改器的觸發條件是 save方法

 

 

11、自動完成

        

         1、修改器和自動完成區別

 

        修改器:資料賦值的時候自動進行轉換處理

        自動完成:沒有手動賦值的情況下進行手動處理

 

    2、自動完成

 

             // 增加和修改操作都會執行

             protected $auto=[];

             // 建立資料執行

             protected $insert=['create_time'];

             // 修改資料執行

             protected $update=['update_time'];

 

12、時間戳

        

         1、系統支援自動寫入建立和更新的時間戳欄位

                   1) 在配置檔案中設定

                            // 自動寫入時間戳欄位

                            'auto_timestamp'  => true,

 

                   2) 在資料模型中設定

 

                            // 設定自動寫入時間戳

                            protected $autoWriteTimestamp=true;

 

         2、可以設定欄位預設值

 

                   // 增加時間的欄位

                   protected $createTime='create_times';

                   // 更新時間的欄位

                   protected $updateTime='update_times';

 

         3、取消更新時間戳設定

 

                   protected $updateTime=false;

 

14、軟刪除

        

         1、作用:

 

                   實現假刪除,可以進行恢復

 

         2、實現

 

                   <?php

                            // 宣告名稱空間

                            namespace app\index\model;

                            // 匯入系統的資料模型

                            use think\Model;

                            // 配合軟刪除

                            use traits\model\SoftDelete;

                            // 宣告user模型

                            class User extends Model{

                                     // 使用軟刪除

                                     use SoftDelete;

                                     // 設定刪除的時間戳

                                     protected $deleteTime="delete_times";

 

                            }

 

         3、控制器      

 

 

                   1、刪除資料

 

                            $res=User::destroy(15);

 

                   2、獲取資料

 

                            $res=User::get(15);

                            // 軟刪除 資料庫資料存在,但是get獲取不到

 

                   3、直接刪除資料

 

                   $res=User::destroy(14,true);

 

                   $user=new User();

 

                   $res=$user->where("id",'5')->delete();

 

         4、讀取所有資料包含軟刪除資料

 

                 $res=User::withTrashed()->find(15);

                 $res=User::withTrashed()->select();

 

             5、僅僅讀取軟刪除資料

 

                 $res=User::onlyTrashed()->select();

                 $res=User::onlyTrashed()->find(1);

 

 

 

 

                            

 

相關文章