<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之旅 廣告
                # 數據創建 在進行數據操作之前,我們往往需要手動創建需要的數據,例如對于提交的表單數據: ```php // 獲取表單的POST數據 $data['name'] = $_POST['name']; $data['email'] = $_POST['email']; // 更多的表單數據值獲取 //…… ``` ### 創建數據對象 ThinkPHP可以幫助你快速地創建數據對象,最典型的應用就是自動根據表單數據創建數據對象,這個優勢在一個數據表的字段非常之多的情況下尤其明顯。 很簡單的例子: ```php // 實例化User模型 $User = M('User'); // 根據表單提交的POST數據創建數據對象 $User->create(); ``` Create方法支持從其它方式創建數據對象,例如,從其它的數據對象,或者數組等 ```php $data['name'] = 'ThinkPHP'; $data['email'] = 'ThinkPHP@gmail.com'; $User->create($data); ``` 甚至還可以支持從對象創建新的數據對象 ```php // 從User數據對象創建新的Member數據對象 $User = stdClass(); $User->name = 'ThinkPHP'; $User->email = 'ThinkPHP@gmail.com'; $Member = M("Member"); $Member->create($User); ``` 創建完成的數據可以直接讀取和修改,例如: ```php $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方法的第二個參數可以指定創建數據的操作狀態,默認情況下是自動判斷是寫入還是更新操作。 也可以顯式指定操作狀態,例如: ```php $Member = M("User"); // 指定更新數據操作狀態 $Member->create($_POST,Model::MODEL_UPDATE); ``` 系統內置的數據操作包括Model::MODEL_INSERT(或者1)和Model::MODEL_UPDATE(或者2),當沒有指定的時候,系統根據數據源是否包含主鍵數據來自動判斷,如果存在主鍵數據,就當成Model::MODEL_UPDATE操作。 不同的數據操作狀態可以定義不同的數據驗證和自動完成機制,所以,你可以自定義自己需要的數據操作狀態,例如,可以設置登錄操作的數據狀態(假設為3): ```php $Member = M("User"); // 指定更新數據操作狀態 $Member->create($_POST,3); ``` 事實上,create方法所做的工作遠非這么簡單,在創建數據對象的同時,完成了一系列的工作,我們來看下create方法的工作流程就能明白: |步驟 |說明 |返回| |----|----|-----| |1 |獲取數據源(默認是POST數組)| | |2 |驗證數據源合法性(非數組或者對象會過濾)| 失敗則返回false| |3 |檢查字段映射 | | |4 |判斷數據狀態(新增或者編輯,指定或者自動判斷)| | |5 |數據自動驗證| 失敗則返回false| |6 |表單令牌驗證 |失敗則返回false | |7 |表單數據賦值(過濾非法字段和字符串處理) | | |8 |數據自動完成 | | |9 |生成數據對象(保存在內存) | | 因此,我們熟悉的令牌驗證、自動驗證和自動完成功能,其實都必須通過create方法才能生效。 如果沒有定義自動驗證的話,create方法的返回值是創建完成的數據對象數組,例如: ```php $data['name'] = 'thinkphp'; $data['email'] = 'thinkphp@gmail.com'; $data['status'] = 1; $User = M('User'); $data = $User->create($data); dump($data); ``` 輸出結果為: ```php array (size=3) 'name' => string 'thinkphp' (length=8) 'email' => string 'thinkphp@gmail.com' (length=18) 'status'=> int 1 ``` Create方法創建的數據對象是保存在內存中,并沒有實際寫入到數據庫中,直到使用add或者save方法才會真正寫入數據庫。 因此在沒有調用add或者save方法之前,我們都可以改變create方法創建的數據對象,例如: ```php $User = M('User'); $User->create(); //創建User數據對象 $User->status = 1; // 設置默認的用戶狀態 $User->create_time = time(); // 設置用戶的創建時間 $User->add(); // 把用戶對象寫入數據庫 ``` 如果只是想簡單創建一個數據對象,并不需要完成一些額外的功能的話,可以使用data方法簡單的創建數據對象。 使用如下: ```php // 實例化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方法,則表示只允許創建指定的字段數據,其他非法字段將會被過濾,例如: ```php $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); ``` 輸出結果為: ```php array (size=2) 'name' => string 'thinkphp' (length=8) 'email' => string 'thinkphp@gmail.com' (length=18) ``` 最終只有name和email字段的數據被允許寫入,status和test字段直接被過濾了,哪怕status也是數據表中的合法字段。 如果我們有自定義模型類,對于數據新增和編輯操作的話,我們還可以直接在模型類里面通過設置insertFields和updateFields屬性來定義允許的字段,例如: ```php 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>

                              哎呀哎呀视频在线观看