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

                ## 查詢多條數據:all( )方法 >[info] all方法與前節課學習的get方法都是靜態方法,可用模型類直接訪問 #### 2. 源碼: ~~~ /** * 查找所有記錄 * @access public * @param mixed $data 主鍵列表或者查詢條件(閉包) * @param array|string $with 關聯預查詢 * @param bool $cache 是否緩存 * @return static[]|false * @throws exception\DbException */ public static function all($data = null, $with = [], $cache = false) { $query = static::parseQuery($data, $with, $cache); return $query->select($data); } ~~~ >[info] all方法源碼與get源碼幾乎一樣,僅是最后調用的查詢方法不同:select($data) * * * * * #### 3. 參數與返回值: * 參數: | 序號 | 參數 | 說明 | | --- | --- | --- | | 1 | 數字/字符串 | 主鍵列表 | | 2| 查詢表達式 | 支持所有查詢表達式 | | 3 | 閉包函數 | 支持更多高級查詢語法 | * 返回值:數據集對象。 * * * * * #### 4. 實例演示 >[info] 我們仍以tp5_staff數據表為例 一、任務1:獲取tp5_staff表中:id等于1009和1010的記錄 * 控制器:Index.php > 查詢條件以字符串方式給出:’1009,1010‘ ~~~ <?php namespace app\index\controller; //導入模型類 use app\index\model\Staff; class Index { public function index(){ //1.執行查詢,返回數據對象數組 $result = Staff::all('1009,1010'); //2.遍歷該數據對象數組:$result //$data既是循環變量,也是其中一個數據對象 foreach ($result as $data){ //getData()可以獲取數據對象原始數據:$data屬性值 dump($data -> getData()); } } } ~~~ * all( ) 方法的主鍵列表:還可以用數組表示 ~~~ //1.執行查詢,返回數據對象數組 $result = Staff::all([1009,1010]); ~~~ * 以上查詢方法,返回的SQL查詢語句都是一樣的: ~~~ SELECT * FROM `tp5_staff` WHERE `id` IN (1009,1010) ; ~~~ * * * * * 二、任務2:查詢表中年齡age大于30,并且工資salary大于800的員工信息 >[info] 顯然,對于這樣需求,上面方法無能為力,只能通過構造查詢表達式來解決 * 控制器:Index.php ~~~ <?php namespace app\index\controller; //導入模型類 use app\index\model\Staff; class Index { public function index(){ //1.構造查詢表達式 $map['age'] = ['>',30]; $map['salary'] = ['>',8000]; //2.執行查詢,返回數據對象數組 $result = Staff::all($map); //3.遍歷該數據對象數組:$result //$data既是循環變量,也是其中一個數據對象 foreach ($result as $data){ //getData()可以獲取數據對象原始數據:$data屬性值 dump($data -> getData()); } } } ~~~ * 對應的SQL語句: ~~~ SELECT * FROM `tp5_staff` WHERE `age` > 30 AND `salary` > 8000; ~~~ * 查詢結果如下: ![](https://box.kancloud.cn/80c6bb85921c7ae14409e5972b980d60_715x355.png) * * * * * 三、任務3:在任務2的基礎上(age>30 AND salary>8000),我們又提出了三個需求:按工資排序,只輸出工資最高的3個人的編號,姓名,年齡,工資信息。 >[info] 根據需求,查詢表達式已無法完成,必須借助連貫方法,就這要用到:閉包查詢 * 控制器:Index.php ~~~ <?php namespace app\index\controller; //導入模型類 use app\index\model\Staff; class Index { public function index(){ //1.構造閉包函數 $closure = function ($query){ //1.設置字段別名 $field['id'] = '編號'; $field['name'] = '姓名'; $field['age'] = '年齡'; $field['salary'] = '工資'; //2.設置查詢表達式 $map['age'] = ['>',30]; $map['salary'] = ['>',8000]; //3.執行查詢 $query -> field($field) //限制顯示字段 -> where($map) //過濾查詢結果 -> order('salary desc') //按salary字段降序輸出 -> limit(3); //限制輸出數量 }; //2.執行閉包查詢,返回數據對象數組 $result = Staff::all($closure); //3.遍歷該數據對象數組:$result //$data既是循環變量,也是其中一個數據對象 foreach ($result as $data){ //getData()可以獲取數據對象原始數據:$data屬性值 dump($data -> getData()); } } } ~~~ * 查詢對應的SQL語句: ~~~ SELECT `id` AS `編號`,`name` AS `姓名`,`age` AS `年齡`,`salary` AS `工資` FROM `tp5_staff` WHERE `age` > 30 AND `salary` > 8000 ORDER BY salary desc LIMIT 3 ~~~ * 瀏覽器查看: ~~~ array(4) { ["編號"] => int(1006) ["姓名"] => string(9) "西門慶" ["年齡"] => int(90) ["工資"] => float(20301) } array(4) { ["編號"] => int(1002) ["姓名"] => string(6) "幫主" ["年齡"] => int(255) ["工資"] => float(12345) } array(4) { ["編號"] => int(1028) ["姓名"] => string(6) "方方" ["年齡"] => int(90) ["工資"] => float(10877) } ~~~ * 數據庫查詢結果:SQLPRO for MySQL工具 ![](https://box.kancloud.cn/7ee2c1ef33d0f1faa90e18012bcf04ca_772x359.png) * * * * * #### 5. 總結: >[success] all( )方法與查詢類的select方法的功能是一樣的,你完成可以認為這是省去了選擇數據表的select操作。 * 其實我們將閉包查詢中的all( ),換成:select( )方法,查詢結果是一樣的 ~~~ $result = Staff::select($closure); ~~~ 與 ~~~ $result = Staff::all($closure); ~~~ 完全是等價的! >[warning] 為什么會是這樣的呢?Model類中并沒有select靜態方法呀!這就是__callStatic( )魔術方法的魔力發揮了作用!記不清的同學,請復習OOP編程總結章節。
                  <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>

                              哎呀哎呀视频在线观看