ThinkPHP--CURD?

Tags: 數據,

ThinkPHP 模型中的 CURD 操作,也就是增刪改查。通過 CURD,我們可以方便快速的對數據庫進行操作。

ThinkPHP--CURD 操作

方法/步驟

數據創建在數據庫添加等操作之前,我們首先需要對數據進行創建。何為數據創建,就是接受提交過來的數據,比如表單提交的 POST(默認)數據。接受到數據後,還可以對數據進行有效的驗證、完成、生成等工作。//根據表單提交的POST數據,創建數據對象$user = M('User');var_dump($user->create());PS:這裡 create()方法就是數據創建,數據的結果就是提交的 POST 數據的鍵值對。特別注意的是:提交過來的字段和數據表字段是對應的,否則無法解析。//通過數組手工獲取數據,覆蓋提交的$user = M('User');$data['user'] = $_POST['user'];$data['email'] = $_POST['email'];$data['date'] = date('Y-m-d H:i:s'); //和數據表對應,否則無效var_dump($user->create($data));//通過對象手工獲取數據,覆蓋提交的$user = M('User');$data = new \stdClass();$data->user = $_POST['user'];$data->email = $_POST['email'];$data->date = date('Y-m-d H:i:s');

var_dump($user->create($data));//默認是$_POST,傳遞$_GET修改$user = M('User');var_dump($user->create($_GET));create()方法可以傳遞第二個參數,將要操作的模式,有兩種:Model::MODEL_INSERT和 Model::MODEL_UPDATE,即新增和修改。當沒有指定的時候,系統會根據數據源是否包含主鍵來自動判斷,如果包含主鍵,則就是修改操作。//設置將要新增操作$user = M('User');var_dump($user->create($_POST, Model::MODEL_INSERT));create()方法的內部工作分為 9 步:1.獲取數據源(默認是 POST);2.驗證數據合法性(非數據或對象會過濾),失敗則返回 false;3.檢查字段映射;4.判斷數據狀態(新增還是修改);5.數據自動驗證,失敗則返回 false;6.表單令牌驗證,失敗則返回 false;7.表單數據賦值(過濾非法字段和字符串處理);8.數據自動完成;9.生成數據對象(保存在內存)。create()方法可以配合連貫操作配合數據創建,支持的連貫操作有:1.field,用於定義合法的字段;2.validate,用於數據自動驗證;3.auto,用於數據自動完成;4.token,用於令牌驗證。//限制可操作的字段$user = M('User');var_dump($user->field('user')->create());//在模型類裡限制字段class UserModel extends Model {protected $insertFields = 'user';protected $updateFields = 'user';}

數據寫入數據寫入使用的是 add()方法。//新增一條數據$user = M('User');$data['user'] = '李炎恢';$data['email'] = '[email protected]';$data['date'] = date('Y-m-d H:i:s');$user->add($data);//結合create()方法$user = M('User');$data = $user->create();$data['date'] = date('Y-m-d H:i:s');$user->add($data);add()方法支持的連貫操作有:1.table,定義數據表名稱;2.data,指定要寫入的數據對象;3.field,定義要寫入的字段;4.relation,關聯查詢;5.validate,數據自動驗證;6.auto,數據自動完成;7.filter,數據過濾;8.scope*,命名範圍;9.bind,數據綁定操作;10.token,令牌驗證;11.comment,SQL 註釋;//使用data連貫方法$user = M('User');$data = $user->create();$data['date'] = date('Y-m-d H:i:s');$user->data($data)->add();//data連貫方法 支持字符串、數組、對象$user = M('User');$data = 'user=星矢&[email protected]&date='.date('Y-m-d H:i:s');$user->data($data)->add();

數據讀取在之前的課程中,我們已經大量使用了數據讀取的功能,比如 select()方法。結合各種連貫方法可以實現數據讀取的不同要求,支持連貫的方法有:1.where,查詢或更新條件;2.table,要操作的數據表名稱;3.alias,數據表別名;4.field,查詢字段;5.order,結果排序;6.group,查詢分組;7.having,分組再查詢;8.join,多表鏈接查詢;9.union,合併 SELECT;10.distinct,取唯一值;11.lock,鎖;12.cache,緩存;13.relation,關聯查詢;14.result,數據轉換;15.scope,命名範圍;16.bind,數據綁定操作;17.comment,SQL 註釋。//顯示默認第一條數據$user = M('User');var_dump($user->find()); //可以傳遞數字參數,AR 模式//顯示默認所有數據$user = M('User');var_dump($user->select()); //可以傳遞數組形式的 SQL//獲取第一條user字段的值$user = M('User');var_dump($user->getField('user'));//獲取所有user字段的值$user = M('User');var_dump($user->getField('user',true));//傳遞多個字段,獲取所有$user = M('User');var_dump($user->getField('user,email'));//id冒號分隔$user = M('User');var_dump($user->getField('id,user,email',':'));//限制2條數據$user = M('User');var_dump($user->getField('id,user,email',2));

數據更新數據更新使用的方法是 save()方法,主要是對數據的修改操作。//修改第一條數據$user = M('User');$data['user'] = '蠟筆大新';$data['email'] = '[email protected]';$map['id'] = 1;$user->where($map)->save($data); //成功後返回 1,否則 0//默認主鍵為條件$user = M('User');$data['id'] = 1;$data['user'] = '蠟筆小新';$data['email'] = 'xiaox[email protected]';$user->save($data);數據更新的 save()方法支持的連貫方法有:1.where,查詢或更新條件;2.table,要操作的數據表名稱;3.alias,數據表別名;4.field,查詢字段;5.order,結果排序;6.lock,鎖;7.relation,關聯查詢;8.scope,命名範圍;9.bind,數據綁定操作;10.comment,SQL 註釋。//結合create()$user = M('User');$user->create(); //POST必須包含主鍵$user->save();//修改某一個值$user = M('User');$map['id'] = 1;$user->where($map)->setField('user', '蠟筆大新');//統計累計,累加累減$user = M('User');$map['id'] = 1;$user->where($map)->setInc('count',1); //累加,setDec 累減

數據刪除數據刪除使用的方法是 delete()方法。//直接刪除主鍵(id=17)$user = M('User');$user->delete(17);//根據ID來刪除$user = M('User');$map['id'] = 16;$user->where($map)->delete();//批量刪除多個$user = M('User');$user->delete('1,3,5');//刪除count為0且按時間倒序的前五個$user = M('User');$map['count'] = 0;$user->where($map)->order(array('date'=>'DESC'))->limit(5)->delete();//刪除所有數據,謹慎$user = M('User');echo $user->where('1')->delete();delete()方法支持的連貫操作有:1.where,查詢或更新條件;2.table,要操作的數據表名稱;3.alias,數據表別名;4.order,結果排序;5.lock,鎖;6.relation,關聯查詢;7.scope,命名範圍;8.bind,數據綁定操作;9.comment,SQL 註釋。

ActiveReocrd 模式這種模式最大的特別就是簡化了 CURD 的操作,並且採用對象化的操作方式,便於使用和理解。//添加一條數據$user = M('User');$user->user = '火影忍者';$user->email = '[email protected]';$user->date = date('Y-m-d H:i:s');$user->add();//結合create$user = M('User');$user->create();$user->date = date('Y-m-d H:i:s');$user->add();//找到主鍵為4的值$user = M('User');var_dump($user->find(4));//查找user=蠟筆小新的記錄$user = M('User');var_dump($user->getByUser('蠟筆小新'));//輸出userecho $user->user;//通過主鍵查詢多個$user = M('User');var_dump($user->select('1,2,3'));//修改一條數據$user = M('User');$user->find(1);$user->user = '蠟筆老新';$user->save();//刪除當前找到的數據$user = M('User');$user->find(11);$user->delete();//刪除主鍵為10的數據$user = M('User');$user->delete(10);//刪除主鍵為10,11的數據$user = M('User');$user->delete('10,11');

字段映射字段映射可以將表單裡的 name 名稱對應到數據表裡的字段,這樣防止系統自動屏蔽掉不對應的 POST 值。//字段映射protected $_map = array('xingming'=>'user','youxiang'=>'email',);//字段映射獲取$user = D('User');var_dump($user->create());

相關問題答案