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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # AR模型 ## findOne AR模型的findOne這個靜態方法是用于查找數據并轉換成模型實例返回,它的參數有兩種表達方式: 1. 數據ID,就是主鍵 2. 條件數組,和yii\\db\\Query的where數組寫法一樣 相當于Query對象的one方法返回一條記錄的數組一樣,findOne就是返回一條記錄的對象,由于是對象,是對象就能有方法,有方法就能方便地執行save、delete等,以及封裝更多處理邏輯 ## 字段賦值 如果數據表里有name字段,則可以直接操作模型的name屬性,像上面`$test2->name`這樣 還可以用數組語法操作,比如`$test['name'] = 'abc'; $test->save();` ## 轉成數組 Test::findOne這樣查出來是個對象,可是返回給前端的要是個數組咋辦,可以這樣: ~~~php Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; Yii::$app->response->data = $test->toArray(); ~~~ 用toArray能將數據庫相關的字段轉換成數組來返回 ## 查詢多條記錄 將**findOne**改成`findAll`即可,參數和findOne一模一樣 它就相當于Query對象的all方法返回多條記錄的數組一樣,findAll就是返回多條記錄的模型數組 示例代碼: ~~~php foreach(Test::findAll(['status' => 1]) as $test){ print_r($test->name, $test->age); } ~~~ 無條件findAll就傳個空數組吧,但不能不傳參數 ## 批量更新數據 用`updateAll`方法: ~~~php Test::updateAll(['name' => 'abc'], ['id' => $ids]); //UPDATE test SET name = abc WHERE id in ($ids) ~~~ 第一個參數是要更新的字段和值 第二個參數就是條件,當然還是跟Query的where方法參數一樣啦親 不用AR模型實現更新數據的話,那就要這樣來寫代碼了: ~~~php Yii::$app->db->createCommand()->update(Test::tableName(), $data, ['id' => $ids]) ~~~ 那至少,用AR模型寫更新的代碼會短一些,但當然AR不僅僅只是為了縮短代碼的書寫而存在…… ## 實現更新 +1 之類的 要實現這樣更新文章點擊數量的話:(`UPDATE xxxTable SET view_count = view_count + 1`) 用`updateCounters`這個方法: ~~~php $article = Article::findOne(1); $article->updateCounters(['view_count' => 1]); ~~~ key就是要累加的字段,value就是要累加的值,如果是`'view_count' => 3`那自然就是`SET view_count = view_count + 3`了 ## 批量刪除數據 一樣的思想,就是`deleteAll`方法: ~~~php Test::deleteAll(['id' => $ids]); //DELETE FROM test WHERE id in($ids) ~~~ 參數就是刪除的條件 # AR查詢器 AR模型查詢的時候除了有`模型::findOne(條件)`和`模型::findAll(條件)`以外,第三種常見的使用方式就是先通過find方法創建一個[AR查詢器](http://www.yiichina.com/doc/api/2.0/yii-db-activequery)(yii\\db\\ActiveQuery),代碼就是這樣的`模型::find()->where($condition)...->all()` 先試一下: ~~~php $testList = Test::find()->where(['type' => 3])->all(); foreach($testList as $test){ echo $test->id; } ~~~ 這樣find,where,all后返回的也是一個數組,而每個元素都是一個Test模型實例,實際上是跟`Test::findAll(['type' => 3])`是等效的 # find方法存在的意義 find方法其實不做任何實際的查詢,它只是創建一個查詢器,你可以理解成這樣一個思想: ~~~php public static function find(){ $query = new \yii\db\ActiveQuery(); $query->from(static::tableName()); return $query; } ~~~ 這里它返回的[ActiveQuery](http://www.yiichina.com/doc/api/2.0/yii-db-activequery)也是一個查詢器,跟[yii\\db\\Query](http://www.yiichina.com/doc/api/2.0/yii-db-query)這個查詢器是同一性質的東西 區別是:**Query只查出純數組形式的結果集,而ActiveQuery是查出對象形式的數據模型對象實例結果集**,可謂是一個輕量級,一個重量級 其中ActiveQuery(好了我以后都簡稱為AR查詢器了)也能像Query一樣where() select() limit() orderBy one() all().... 但是不能from(),實際上AR查詢器并沒有from方法讓我們去設定表名(所以其實我上面的代碼是無效的!它只是一個思想演示),它是通過別的方法與一個模型的表進行綁定的,我就不說那么復雜了 好了既然返回一個查詢器,就可以想像到我們可以自由地控制一些查詢參數來實現更多豐富的查詢,這就是**find方法的存在意義**,也就是AR查詢器的存在意義,比如要查詢最高分的前10名用戶: ~~~php $users = User::find() ->where(['sex' => 1]) ->orderBy(['score' => SORT_DESC]) ->limit(10) ->all(); ~~~
                  <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>

                              哎呀哎呀视频在线观看