初識thinkphp(5)
這次主要內容是模型的基本操作
0x01:什麽是模型
通過手冊的閱覽,籠統的說就是,把打開數據庫等操作在另一個php文件中進行
以及對變量的規則具體細節,查詢,取值等操作進行定義,方便在控制器中直接使用。
0x02:模型的使用
在index目錄下創建與controller同級的目錄model
創建php模型文件,並調用think\Model文件
<?php namespace app\index\model; use think\Model; class User extends Model{ protected $table = ‘think_user‘;protected function getBirthdayAttr($birthday){ return date(‘Y-m-d‘, $birthday); } protected function setBirthdayAttr($value){ return strtotime($value); } protected function scopeEmail($query){ $query->where(‘email‘, ‘[email protected]‘); } }?>
table是獲取數據庫變量,之前在application\database.php文件中已經對打開數據庫進行關聯了。
getBirthdayAttr函數中命名規則 get + 名稱 + Attr
這樣能在控制器中直接調用 echo birthday變量 而不用再用date()函數進行轉換
setBirthdayAttr函數中命名規則 set + 名稱 + Attr
這樣在控制器中修改birthday不用調用strtotime()函數,而是直接的user->birthday = ‘xxxx-xx-xx‘
scopeEmail函數中命名規則 scope + 名稱
這樣在查詢的時候不用再寫sql語句或者thinkphp自帶的sql調用,就可以查詢相關聯內容
註意:這裏的函數中“名稱”即使變量名,如果不是變量名,會出現錯誤。
0x03:在控制器中模型的調用
對於數據庫的操作無意就是增刪改查
public function add() { $user = new UserModel; $user->nickname = ‘sijidou‘; $user->email = ‘[email protected]‘; $user->birthday = "1998-10-30" //strtotime(‘1998-10-30‘); if ($user->save()) { return 增加成功信息; } else { return $user->getError(); } }
增加無疑就是new一個模型,註意這裏的對象是模型裏面的類名,這裏因為控制器名字也叫User於是用引用修改了下模型中的User的名字
use app\index\model\User as UserModel;
這裏的birthday實則調用了模型中的setBirthdayAttr函數,如果沒有setBirthdayAttr函數,信息可以存儲,但在最後輸出時候時間固定是1970-01-01的默認值(我這裏是這樣的)
public function update($id){ $user = UserModel::get($id); $user->nickname = ‘tudou‘; $user->email = ‘[email protected]‘; $user->birthday = ‘1999-4-5‘; $user->save(); } public function delete($id){ $user = UserModel::get($id); if($user){ $user->delete(); return ‘刪除用戶成功‘; } else{ return ‘刪除用戶不成功‘; } } public function search($email){ $list = UserModel::scope(‘email‘, $email)->select(); foreach($list as $user){ echo $user->nickname . ‘<br/>‘; echo $user->email . ‘<br/>‘; echo $user->birthday . ‘<br/>‘; } }
改刪查中,改和刪都用到的是get,對應的默認調用了getBirthdayAttr函數,而查中的scope則調用的是scopeEmail函數,如果將email變量該為nickname並在模型中添加相應的scopeNickname($nickname)那麽可以根據nickname的值進行查詢。
0x04:與view之間的交互
這裏我使用的官方提供的html模板,源碼就不貼了,反正就是個form表格,和一點css。
這裏將控制器的內容傳到視圖裏面去,需要用view方法,且對應打開的視圖文件名稱默認為方法名稱
訪問的路徑為http://192.168.60.132/index/user/create
這裏對add()函數進行修改
input函數這裏是thinkphp特有的參數,主要功能是用來修改將代碼賦值內容改為用接收post傳參這裏的"post."中的‘.‘主要是用來匹配所有的參數,如果具體到某一個可以"post.nickname"
allowField(true)是thinkphp中特有的函數,功能是用來過濾非數據表中的數據
validate()函數是tinkphp中特有的函數,功能主要是用來校驗post過來的數據是否符合規範。
validate的內容在validate的模板中定義(在5.1版本中不可這樣定義了,直接在控制器下寫個函數就行)
validate模板路徑 .\index\validate\User.php
內容為
用rule來給鍵值對規定
require是必填
min:5是長度最小為5
email是檢測是否符合郵箱規範
dateFormat:Y-m-d檢測是否符合日期規範(數值不在月份日份以內也不行)
checkMail自定義方法:$value => email參數 $rule => ‘qq.com‘規則,用if語句判斷
preg_match是用於正則表達式匹配的比較函數
0x05:關聯與輸出
手冊講的挺多的,無非就是一對一、一對多、多對多
一對一:在一個中用this->hasOne(另一個模型名),另一個用belongsTo(前一個模型名)
一對多:在一個中用this->hasMany()來定義額外的(),其他與一對一一樣
多對多:與一對多差不多,即在每個模型中的belongToMany(對應模型1,對應模型2,。。。)
在add中如果要對關聯的模型修改
當前模型->關聯模型->關聯模型變量 = 內容
保存時候用(這裏用的示例函數,作者懶不想測試了,以後用得上再使用)
模型輸出
無非就是操作器裏面輸出或者跳轉到視圖裏面輸出
跳轉到視圖用view(‘視圖文件名字‘),一般是在controller同級目錄下的view文件裏面
不帶參數默認與方法名字相同。
在操作器內輸出用var_dump也行,return也行
這裏還可以用ToArray()來將數組輸出,hidden([變量名])來隱藏相應變量輸出,visible([變量])來指定有且只有定義的變量輸出。
總結:這節內容差不多就這樣,之前寫的幾篇示例我覺得太詳細了,以至於像教科書般的流水賬,寫博文主要還是記筆記,記重點,所以這裏比較精簡。以及最後的關聯相關的內容並沒有測試,等到以後實際操作時候再用吧。最近要期末了,又沒期末復習,又沒寫博客,真是太頹廢了。
初識thinkphp(5)