<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # CURD操作 [上一頁](# "上一頁")[下一頁](# "下一頁") ThinkPHP提供了靈活和方便的數據操作方法,對數據庫操作的四個基本操作(CURD):創建、更新、讀取和刪除的實現是最基本的,也是必須掌握的,在這基礎之上才能熟悉更多實用的數據操作方法。CURD操作通常是可以和連貫操作配合完成的。下面來分析下各自的用法: (下面的CURD操作我們均以M方法創建模型實例來說明,因為不涉及到具體的業務邏輯) ### 創建(Create) 在ThinkPHP中使用add方法新增數據到數據庫(而并不是create方法)。 <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">add 寫入(新增)數據到數據庫 </th> </tr><tr><td>用法 </td> <td>add($data='',$options=array(),$replace=false)</td> </tr><tr><td>參數 </td> <td><p>data(可選):要新增的數據,支持數組和對象,如果留空取當前數據對象 </p><br/><p>options(可選):操作表達式,通常由連貫操作完成,默認為空數組 </p><br/><p>replace(可選):是否允許寫入時更新,默認為false(個別數據庫支持)</p> </td> </tr><tr><td>回調接口 </td> <td><p>寫入前 _before_insert(&amp;$data,$options)</p><br/><p>寫入成功 _after_insert($data,$options)</p></td> </tr><tr><td>返回值 </td> <td><p>如果數據非法或者查詢錯誤則返回false</p><br/><p>如果是自增主鍵 則返回主鍵值,否則返回1</p></td> </tr><tr><td>相關方法 </td> <td>通常和data、create方法配合使用 </td> </tr></table> 使用示例如下:`$User?=?M("User");?//?實例化User對象 $data['name']?=?'ThinkPHP'; $data['email']?=?'ThinkPHP@gmail.com'; $User->add($data);`或者使用data方法連貫操作`$User->data($data)->add();`如果在add之前已經創建數據對象的話(例如使用了create或者data方法),add方法就不需要再傳入數據了。 使用create方法的例子:`$User?=?M("User");?//?實例化User對象 //?根據表單提交的POST數據創建數據對象 $User->create(); $User->add();?//?根據條件保存修改的數據`如果你的主鍵是自動增長類型,并且如果插入數據成功的話,Add方法的返回值就是最新插入的主鍵值,可以直接獲取。 從2.1版開始恢復了批量插入數據的addAll方法(僅針對Mysql數據庫),如:`$User->addAll($data)`同時在數據插入時允許更新操作:`add($data='',$options=array(),$replace=false)`其中add方法增加$replace參數(是否添加數據時允許覆蓋),true表示覆蓋,默認為false ### 讀取(Read) 在ThinkPHP中讀取數據的方式很多,通常分為讀取數據和讀取數據集。 讀取數據集使用select方法(新版已經廢除原來的findall方法): <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">select 查詢數據集 </th> </tr><tr><td>用法</td> <td>select($options=array())</td> </tr><tr><td>參數</td> <td>options(可選):為數組的時候表示操作表達式,通常由連貫操作完成;如果是數字或者字符串,表示主鍵值。默認為空數組。</td> </tr><tr><td>回調接口</td> <td>查詢成功?_after_select(&amp;$resultSet,$options)</td> </tr><tr><td>返回值</td> <td><p>查詢錯誤返回false</p><br/><p>查詢結果為空返回null</p><br/><p>查詢成功返回查詢的結果集(二維索引數組)</p></td> </tr><tr><td>相關方法</td> <td>通常配合連貫操作where、field、order、limit、join等一起使用</td> </tr></table> 使用示例:`$User?=?M("User");?//?實例化User對象 //?查找status值為1的用戶數據?以創建時間排序?返回10條數據 $list?=?$User->where('status=1')->order('create_time')->limit(10)->select();`Select方法配合連貫操作方法可以完成復雜的數據查詢。而最復雜的連貫方法應該是where方法的使用,因為這部分涉及的內容較多,我們會在查詢語言部分就如何進行組裝查詢條件進行詳細的使用說明。基本的查詢暫時不涉及關聯查詢部分,而是統一采用關聯模型來進行數據操作,這一部分請參考關聯模型部分。讀取數據使用find方法: <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">find 查詢數據 </th> </tr><tr><td>用法</td> <td>find($options=array())</td> </tr><tr><td>參數</td> <td>options(可選):為數組的時候表示操作表達式,通常由連貫操作完成;為數字或者字符串的時候表示主鍵值。默認為空數組。</td> </tr><tr><td>回調接口</td> <td>查詢后?_after_find(&amp;$result,$options)</td> </tr><tr><td>返回值</td> <td><p>如果查詢錯誤返回false</p><br/><p>如果查詢結果為空返回null</p><br/><p>如果查詢成功返回查詢的結果(索引數組)</p></td> </tr><tr><td>相關方法</td> <td>通常配合連貫操作where、field、order、join等一起使用</td> </tr></table> 讀取數據的操作其實和數據集的類似,select可用的所有連貫操作方法也都可以用于find方法,區別在于find方法最多只會返回一條記錄,因此limit方法對于find查詢操作是無效的。 下面是一些查詢的例子:`$User?=?M("User");?//?實例化User對象 //?查找status值為1name值為think的用戶數據? $User->where('status=1?AND?name="think"')->find();`即使滿足條件的數據不止一條,find方法也只會返回第一條記錄。如果要讀取某個字段的值,可以使用getField方法 <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">getField 查詢某個字段的值 </th> </tr><tr><td>用法</td> <td>getField($field,$sepa=null)</td> </tr><tr><td>參數</td> <td><p>field(必須):要獲取的字段字符串(多個用逗號分隔)</p><br/><p>sepa(可選):字段數據間隔符號,如果是?NULL返回數組為數組。默認為null。</p></td> </tr><tr><td>回調接口</td> <td>查詢后?_after_find(&amp;$result,$options)</td> </tr><tr><td>返回值</td> <td><p>如果查詢結果為空返回null</p><br/><p>如果field是一個字段則返回該字段的值</p><br/><p>如果field是多個字段,返回數組。數組的索引是第一個字段的值,sepa為null則返回二維數組。</p></td> </tr><tr><td>相關方法</td> <td>通常配合連貫操作where、limit、order等一起使用</td> </tr></table> 示例如下:`$User?=?M("User");?//?實例化User對象 //?獲取ID為3的用戶的昵稱? $nickname?=?$User->where('id=3')->getField('nickname');`當只有一個字段的時候,默認返回一個值。 如果需要返回數組,可以用:`$this->getField('id',true);?//?獲取id數組`如果傳入多個字段的話,默認返回一個關聯數組:`$User?=?M("User");?//?實例化User對象 //?獲取所有用戶的ID和昵稱列表? $list?=?$User->getField('id,nickname');`返回的list是一個數組,鍵名是用戶的id, 鍵值是用戶的昵稱nickname。 如果傳入多個字段的名稱,例如:`$list?=?$User->getField('id,nickname,email');`返回的是一個二維數組,類似select方法的返回結果,區別的是這個二維數組的鍵名是用戶的id(準確的說是getField方法的第一個字段名)。 如果我們傳入一個字符串分隔符:`$list?=?$User->getField('id,nickname,email',':');`那么返回的結果就是一個數組,鍵名是用戶id,鍵值是 nickname:email的輸出字符串。 getField方法的sepa參數還可以支持限制數量,例如:`$this->getField('id,name',5);?//?限制返回5條記錄 $this->getField('id',3);?//?獲取id數組?限制3條記錄`可以配合使用order方法使用。 ### 更新(Update) 在ThinkPHP中使用save方法更新數據庫,并且也支持連貫操作的使用。 <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">save 更新數據到數據庫 </th> </tr><tr><td>用法</td> <td width="450">save($data='',$options=array())</td> </tr><tr><td>參數</td> <td><p>data:要保存的數據,如果為空,則取當前的數據對象。</p><br/><p>options:為數組的時候表示操作表達式,通常由連貫操作完成;為數字或者字符串的時候表示主鍵值。默認為空數組。</p></td> </tr><tr><td>回調接口</td> <td><p>更新前_before_update(&amp;$data,$options)</p><br/><p>更新成功后?_after_update($data,$options)</p></td> </tr><tr><td>返回值</td> <td><p>如果查詢錯誤或者數據非法返回false</p><br/><p>如果更新成功返回影響的記錄數</p></td> </tr><tr><td>相關方法</td> <td>通常配合連貫操作where、field、order等一起使用</td> </tr></table> `$User?=?M("User");?//?實例化User對象 //?要修改的數據對象屬性賦值 $data['name']?=?'ThinkPHP'; $data['email']?=?'ThinkPHP@gmail.com'; $User->where('id=5')->save($data);?//?根據條件保存修改的數據`為了保證數據庫的安全,避免出錯更新整個數據表,如果沒有任何更新條件,數據對象本身也不包含主鍵字段的話,save方法不會更新任何數據庫的記錄。 因此下面的代碼不會更改數據庫的任何記錄`$User->save($data);?`除非使用下面的方式:`$User?=?M("User");?//?實例化User對象 //?要修改的數據對象屬性賦值 $data['id']?=?5; $data['name']?=?'ThinkPHP'; $data['email']?=?'ThinkPHP@gmail.com'; $User->save($data);?//?根據條件保存修改的數據`如果id是數據表的主鍵的話,系統自動會把主鍵的值作為更新條件來更新其他字段的值。 還有一種方法是通過create或者data方法創建要更新的數據對象,然后進行保存操作,這樣save方法的參數可以不需要傳入。`$User?=?M("User");?//?實例化User對象 //?要修改的數據對象屬性賦值 $data['name']?=?'ThinkPHP'; $data['email']?=?'ThinkPHP@gmail.com'; $User->where('id=5')->data($data)->save();?//?根據條件保存修改的數據`使用create方法的例子:`$User?=?M("User");?//?實例化User對象 //?根據表單提交的POST數據創建數據對象 $User->create(); $User->save();?//?根據條件保存修改的數據`上面的情況,表單中必須包含一個以主鍵為名稱的隱藏域,才能完成保存操作。 如果只是更新個別字段的值,可以使用setField方法。 <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">setField 更新某個字段的值 </th> </tr><tr><td>用法</td> <td width="450">setField($field,$value='')</td> </tr><tr><td>參數</td> <td>options(可選):為數組的時候表示操作表達式,通常由連貫操作完成;為數字或者字符串的時候表示主鍵值。默認為空數組。</td> </tr><tr><td>返回值</td> <td><p>如果查詢錯誤返回false</p><br/><p>如果更新成功返回影響的記錄數</p></td> </tr><tr><td>相關方法</td> <td>必須配合連貫操作where一起使用</td> </tr></table> 使用示例:`$User?=?M("User");?//?實例化User對象 //?更改用戶的name值 $User->?where('id=5')->setField('name','ThinkPHP');`setField方法支持同時更新多個字段,只需要傳入數組即可,例如:`$User?=?M("User");?//?實例化User對象 //?更改用戶的name和email的值 $data?=?array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com'); $User->?where('id=5')->setField($data);`而對于統計字段(通常指的是數字類型)的更新,系統還提供了setInc和setDec方法。 <table border="0" cellspacing="1" cellpadding="0"><tr><th colspan="2">setInc /setDec 字段增長/字段減少 </th> </tr><tr><td>用法</td> <td><p>setInc($field,$step=1)字段值增長</p><br/><p>setDec($field,$step=1)字段值減少</p></td> </tr><tr><td>參數</td> <td><p>field:要更新的字段名。</p><br/><p>step:增長或者減少的數值,默認為1。</p></td> </tr><tr><td>回調接口</td> <td><p>如果查詢錯誤返回false</p><br/><p>如果更新成功返回影響的記錄數</p></td> </tr><tr><td>返回值</td> <td><p>如果查詢錯誤返回false</p><br/><p>如果更新成功返回影響的記錄數</p></td> </tr><tr><td>相關方法</td> <td>必須配合連貫操作where一起使用</td> </tr></table> `$User?=?M("User");?//?實例化User對象 $User->where('id=5')->setInc('score',3);?//?用戶的積分加3 $User->where('id=5')->setInc('score');?//?用戶的積分加1 $User->where('id=5')->setDec('score',5);?//?用戶的積分減5 $User->where('id=5')->setDec('score');?//?用戶的積分減1` ### 刪除(Delete) 在ThinkPHP中使用delete方法刪除數據庫中的記錄。 <table border="0" cellspacing="1" cellpadding="0"><tr><td>用法</td> <td width="450">delete($options=array())</td> </tr><tr><td>參數</td> <td>options:為數組的時候表示操作表達式,通常由連貫操作完成,如果沒有傳入任何刪除條件,則取當前數據對象的主鍵作為條件;為數字或者字符串的時候表示主鍵值。默認為空數組。</td> </tr><tr><td>回調接口</td> <td>刪除成功后?_after_delete($data,$options)</td> </tr><tr><td>返回值</td> <td><p>如果查詢錯誤返回false</p><br/><p>如果刪除成功返回影響的記錄數</p></td> </tr><tr><td>相關方法</td> <td>通常配合連貫操作where、field、order等一起使用</td> </tr></table> 示例如下:`$User?=?M("User");?//?實例化User對象 $User->where('id=5')->delete();?//?刪除id為5的用戶數據 $User->where('status=0')->delete();?//?刪除所有狀態為0的用戶數據`delete方法可以用于刪除單個或者多個數據,主要取決于刪除條件,也就是where方法的參數,也可以用order和limit方法來限制要刪除的個數,例如:`//?刪除所有狀態為0的5?個用戶數據?按照創建時間排序 $User->where('status=0')->order('create_time')->limit('5')->delete();?` [上一頁](# "上一頁")[下一頁](# "下一頁")
                  <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>

                              哎呀哎呀视频在线观看