<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 數據創建 [上一頁](# "上一頁")[下一頁](# "下一頁") 在進行數據操作之前,我們往往需要手動創建需要的數據,例如對于提交的表單數據: ~~~ // 獲取表單的POST數據 $data['name'] = $_POST['name']; $data['email'] = $_POST['email']; // 更多的表單數據值獲取 //…… ~~~ ### 創建數據對象 ThinkPHP可以幫助你快速地創建數據對象,最典型的應用就是自動根據表單數據創建數據對象,這個優勢在一個數據表的字段非常之多的情況下尤其明顯。 很簡單的例子: ~~~ // 實例化User模型 $User = M('User'); // 根據表單提交的POST數據創建數據對象 $User->create(); ~~~ Create方法支持從其它方式創建數據對象,例如,從其它的數據對象,或者數組等 ~~~ $data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->create($data); ~~~ 甚至還可以支持從對象創建新的數據對象 ~~~ // 從User數據對象創建新的Member數據對象 $User = stdClass(); $User->name = 'ThinkPHP'; $User->email = 'ThinkPHP@gmail.com'; $Member = M("Member"); $Member->create($User); ~~~ 創建完成的數據可以直接讀取和修改,例如: ~~~ $data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->create($data); // 創建完成數據對象后可以直接讀取數據 echo $User->name; echo $User->email; // 也可以直接修改創建完成的數據 $User->name = 'onethink'; // 修改name字段數據 $User->status = 1; // 增加新的字段數據 ~~~ ### 數據操作狀態 create方法的第二個參數可以指定創建數據的操作狀態,默認情況下是自動判斷是寫入還是更新操作。 也可以顯式指定操作狀態,例如: ~~~ $Member = M("User"); // 指定更新數據操作狀態 $Member->create($_POST,Model::MODEL_UPDATE); ~~~ 系統內置的數據操作包括`Model::MODEL_INSERT`(或者1)和`Model::MODEL_UPDATE`(或者2),當沒有指定的時候,系統根據數據源是否包含主鍵數據來自動判斷,如果存在主鍵數據,就當成`Model::MODEL_UPDATE`操作。 不同的數據操作狀態可以定義不同的數據驗證和自動完成機制,所以,你可以自定義自己需要的數據操作狀態,例如,可以設置登錄操作的數據狀態(假設為3): ~~~ $Member = M("User"); // 指定更新數據操作狀態 $Member->create($_POST,3); ~~~ 事實上,create方法所做的工作遠非這么簡單,在創建數據對象的同時,完成了一系列的工作,我們來看下create方法的工作流程就能明白: | 步驟 | 說明 | 返回 | |-----|-----|-----| | 1 | 獲取數據源(默認是POST數組) | | | 2 | 驗證數據源合法性(非數組或者對象會過濾) | 失敗則返回false | | 3 | 檢查字段映射 | | | 4 | 判斷數據狀態(新增或者編輯,指定或者自動判斷) | | | 5 | 數據自動驗證 | 失敗則返回false | | 6 | 表單令牌驗證 | 失敗則返回false | | 7 | 表單數據賦值(過濾非法字段和字符串處理) | | | 8 | 數據自動完成 | | | 9 | 生成數據對象(保存在內存) | | 因此,我們熟悉的令牌驗證、[自動驗證](#)和[自動完成](#)功能,其實都必須通過create方法才能生效。 如果沒有定義自動驗證的話,create方法的返回值是創建完成的數據對象數組,例如: ~~~ $data['name'] = 'thinkphp'; $data['email'] = 'thinkphp@gmail.com'; $data['status'] = 1; $User = M('User'); $data = $User->create($data); dump($data); ~~~ 輸出結果為: ~~~ array (size=3) 'name' => string 'thinkphp' (length=8) 'email' => string 'thinkphp@gmail.com' (length=18) 'status'=> int 1 ~~~ Create方法創建的數據對象是保存在內存中,并沒有實際寫入到數據庫中,直到使用`add`或者`save`方法才會真正寫入數據庫。 因此在沒有調用add或者save方法之前,我們都可以改變create方法創建的數據對象,例如: ~~~ $User = M('User'); $User->create(); //創建User數據對象 $User->status = 1; // 設置默認的用戶狀態 $User->create_time = time(); // 設置用戶的創建時間 $User->add(); // 把用戶對象寫入數據庫 ~~~ 如果只是想簡單創建一個數據對象,并不需要完成一些額外的功能的話,可以使用data方法簡單的創建數據對象。使用如下: ~~~ // 實例化User模型 $User = M('User'); // 創建數據后寫入到數據庫 $data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->data($data)->add(); ~~~ Data方法也支持傳入數組和對象,使用data方法創建的數據對象不會進行自動驗證和過濾操作,請自行處理。但在進行add或者save操作的時候,數據表中不存在的字段以及非法的數據類型(例如對象、數組等非標量數據)是會自動過濾的,不用擔心非數據表字段的寫入導致SQL錯誤的問題。 ### 支持的連貫操作 在執行create方法之前,我們可以調用相關的連貫操作方法,配合完成數據創建操作。 create方法支持的連貫操作方法包括: | 連貫操作 | 作用 | 支持的參數類型 | |-----|-----|-----| | field | 用于定義合法的字段 | 字符串和數組 | | validate | 用于數據自動驗證 | 數組 | | auto | 用于數據自動完成 | 數組 | | token | 用于令牌驗證 | 布爾值 | 更多的用法參考后續的內容。 ### 字段合法性過濾 如果在create方法之前調用field方法,則表示只允許創建指定的字段數據,其他非法字段將會被過濾,例如: ~~~ $data['name'] = 'thinkphp'; $data['email'] = 'thinkphp@gmail.com'; $data['status'] = 1; $data['test'] = 'test'; $User = M('User'); $data = $User->field('name,email')->create($data); dump($data); ~~~ 輸出結果為: ~~~ array (size=2) 'name' => string 'thinkphp' (length=8) 'email' => string 'thinkphp@gmail.com' (length=18) ~~~ 最終只有`name`和`email`字段的數據被允許寫入,`status`和`test`字段直接被過濾了,哪怕status也是數據表中的合法字段。 如果我們有自定義模型類,對于數據新增和編輯操作的話,我們還可以直接在模型類里面通過設置`insertFields`和`updateFields`屬性來定義允許的字段,例如: ~~~ namespace Home\Model; use Think\Model; class UserModel extends Model{ protected $insertFields = 'name,email'; // 新增數據的時候允許寫入name和email字段 protected $updateFields = 'email'; // 編輯數據的時候只允許寫入email字段 } ~~~ [上一頁](# "上一頁")[下一頁](# "下一頁")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看