create創建新數據
首先在主目錄下創建index.html,與index.php同級,插入以下代碼
<meta charset="utf-8"> <form method="post" action="http://localhost/demo39/index.php/Home/User/create"> <p>用戶:<input type="text" name="user" /></p> <p>郵箱:<input type="text" name="email" /></p> <p>生日:<input type="text" name="birthday" /></p> <input type="submit" value="提交"> </form>
然后在 Home/controller/UserController.class.php 插入以下代碼
<?php // 本類由系統自動生成,僅供測試用途 namespace Home\Controller; use Think\Controller; use Think\Model; class UserController extends Controller { public function create() { $user = M('User'); var_dump($user->create()); } }
因為數據表的結構為:
所以當在index.php中點擊發送后,var_dump()出的只有user和email的數據,
也就是說,在index.html中建立表單時,設定的name應該與數據表中的名字是對應的。
class UserController extends Controller { public function create() { $user = M('User'); $data['user']='小李'; $data['email']='xiaoli@qq.com'; $data['date']=date('Y-m-d H:i:s'); var_dump($user->create($data)); } }
這時var_dump出的數據就是$data設定的數據
class UserController extends Controller { public function create() { $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)); } }
這時var_dump()的數據就是index.html提交過來的user和email的值,再加上date.
上面介紹的是POST 的方法,也就是index.html中的表單中的 method="post" ,如果改為 method="get" ,則
在 Home/controller/UserController.class.php 中的代碼為
class UserController extends Controller { public function create() { $user = M('User'); var_dump($user->create($_GET)); } }
也就是把create中的方式改為$_GET才能var_dump()出接收到的數據
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());
這時只把收到的user的數據插入數據庫
第二種方法是在 Home/Model/UserModel.class.php 里插入:
class UserModel s extends Model { protected $insertFields = 'user'; protected $updateFields = 'user'; }
然后在 Home/controller/UserController.class.php 插入
$user = D('User'); var_dump($user->create($data));
注意,這里用的是D('User');
為什么要用D方法呢?因為將業務邏輯定義在了自定義的模型類里面(Lib/Model目錄下),而想在操作中實現這些業務邏輯,則需要使用到D 方法
關于D和M的方法,可以查看 這篇文章
add數據寫入
在 Home/controller/UserController.class.php 內插入以下代碼
public function add() { $user=M('user'); $data['user']='小李'; $data['email']='xiaoli@qq.com'; $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);
此時在原先寫的index.html里提交表單,提交的action應該為 http://localhost/demo39/index.php/Home/User/add
因為如果直接使用 $user->add(); 而不加上
$data = $user->create(); $data['date'] = date('Y-m-d H:i:s');
這時提交到數據庫的數據就沒有時間了,因為在提交表單的時候提交時間的數據。
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=星矢&mail=xinshi@qq.com&date='.date('Y-m-d H:i:s'); $user->data($data)->add();
文章列表