文章出處

       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();

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()