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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 查詢范圍 對于一些常用的查詢條件,我們可以封裝成查詢范圍來進行方便的調用。 例如,郵箱地址為`thinkphp@qq.com`和status為1這兩個常用查詢條件,可以定義為模型類的兩個查詢范圍方法: ``` <pre class="calibre18"> ``` <span class="hljs-operator"><span class="hljs-number"><?php</span><span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">model</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Model</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span></span>{ <span class="hljs-comment">// 定義類型轉換</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$type</span> = [ <span class="hljs-string">'birthday'</span> => <span class="hljs-string">'timestamp:Y/m/d'</span>, ]; <span class="hljs-comment">// 定義自動完成的屬性</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$insert</span> = [<span class="hljs-string">'status'</span>]; <span class="hljs-comment">// status修改器</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setStatusAttr</span><span class="hljs-number">(<span class="hljs-regexp">$value</span>, <span class="hljs-regexp">$data</span>)</span></span>{ <span class="hljs-keyword">return</span> <span class="hljs-string">'流年'</span> == <span class="hljs-regexp">$data</span>[<span class="hljs-string">'nickname'</span>] ? <span class="hljs-number">1</span> : <span class="hljs-number">2</span>; } <span class="hljs-comment">// status讀取器</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStatusAttr</span><span class="hljs-number">(<span class="hljs-regexp">$value</span>)</span></span>{ <span class="hljs-regexp">$status</span> = [-<span class="hljs-number">1</span> => <span class="hljs-string">'刪除'</span>, <span class="hljs-number">0</span> => <span class="hljs-string">'禁用'</span>, <span class="hljs-number">1</span> => <span class="hljs-string">'正常'</span>, <span class="hljs-number">2</span> => <span class="hljs-string">'待審核'</span>]; <span class="hljs-keyword">return</span> <span class="hljs-regexp">$status</span>[<span class="hljs-regexp">$value</span>]; } <span class="hljs-comment">// email查詢</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">scopeEmail</span><span class="hljs-number">(<span class="hljs-regexp">$query</span>)</span></span>{ <span class="hljs-regexp">$query</span>->where(<span class="hljs-string">'email'</span>, <span class="hljs-string">'thinkphp@qq.com'</span>); } <span class="hljs-comment">// status查詢</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">scopeStatus</span><span class="hljs-number">(<span class="hljs-regexp">$query</span>)</span></span>{ <span class="hljs-regexp">$query</span>->where(<span class="hljs-string">'status'</span>, <span class="hljs-number">1</span>); } }</span> ``` ``` 查詢范圍方法的定義規范為: > ### scope + 查詢范圍名稱 我們修改控制器的index方法如下: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// 根據查詢范圍獲取用戶數據列表</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span><span class="hljs-number">()</span></span>{ <span class="hljs-regexp">$list</span> = UserModel::scope(<span class="hljs-string">'email,status'</span>)->all(); <span class="hljs-keyword">foreach</span> (<span class="hljs-regexp">$list</span> <span class="hljs-keyword">as</span> <span class="hljs-regexp">$user</span>) { <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->nickname . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->email . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->birthday . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->status . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-string">'-------------------------------------<br/>'</span>; } } ``` ``` 最后查詢的SQL語句是: ``` <pre class="calibre18"> ``` <span class="hljs-operator">SELECT * <span class="hljs-keyword">FROM</span> <span class="hljs-string">`think_user`</span> <span class="hljs-keyword">WHERE</span> <span class="hljs-string">`email`</span> = <span class="hljs-string">'thinkphp@qq.com'</span> <span class="hljs-keyword">AND</span> <span class="hljs-string">`status`</span> = <span class="hljs-number">1</span> </span> ``` ``` 支持多次調用`scope`方法,并且可以追加新的查詢及鏈式操作,例如: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// 根據查詢范圍獲取用戶數據列表</span><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">index</span><span class="hljs-number">()</span></span>{ <span class="hljs-comment">// </span><span class="hljs-regexp">$list</span> = UserModel::scope(<span class="hljs-string">'email'</span>) ->scope(<span class="hljs-string">'status'</span>) ->scope(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-number">(<span class="hljs-regexp">$query</span>)</span> </span>{ <span class="hljs-regexp">$query</span>->order(<span class="hljs-string">'id'</span>, <span class="hljs-string">'desc'</span>); }) ->all(); <span class="hljs-keyword">foreach</span> (<span class="hljs-regexp">$list</span> <span class="hljs-keyword">as</span> <span class="hljs-regexp">$user</span>) { <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->nickname . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->email . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->birthday . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-regexp">$user</span>->status . <span class="hljs-string">'<br/>'</span>; <span class="hljs-keyword">echo</span> <span class="hljs-string">'-------------------------------------<br/>'</span>; } } ``` ``` 上面的scope方法使用了閉包,閉包里面支持所有的鏈式操作方法。 最后生成的SQL語句是: ``` <pre class="calibre18"> ``` <span class="hljs-operator">SELECT * <span class="hljs-keyword">FROM</span> <span class="hljs-string">`think_user`</span> <span class="hljs-keyword">WHERE</span> <span class="hljs-string">`email`</span> = <span class="hljs-string">'thinkphp@qq.com'</span> <span class="hljs-keyword">AND</span> <span class="hljs-string">`status`</span> = <span class="hljs-number">1</span> <span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> <span class="hljs-string">`id`</span> <span class="hljs-keyword">desc</span> </span> ``` ``` 查詢范圍方法支持額外的參數,例如`scopeEmail`方法改為: ``` <pre class="calibre18"> ``` <span class="hljs-comment">// email查詢</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">scopeEmail</span><span class="hljs-number">(<span class="hljs-regexp">$query</span>, <span class="hljs-regexp">$email</span> = <span class="hljs-string">''</span>)</span></span>{ <span class="hljs-regexp">$query</span>->where(<span class="hljs-string">'email'</span>, <span class="hljs-regexp">$email</span>); } ``` ``` > 查詢范圍的方法的第一個參數必須是查詢對象,并且支持多個額外參數。 然后,使用下面的方式調用即可: ``` <pre class="calibre18"> ``` <span class="hljs-regexp">$list</span> = UserModel::scope(<span class="hljs-string">'email'</span>,<span class="hljs-string">'thinkphp@qq.com'</span>)->all(); ``` ``` ## 全局查詢范圍 可以給模型定義全局的查詢范圍,在模型類添加一個靜態的`base`方法即可,例如我們給模型類增加一個全局查詢范圍,用于查詢狀態為1的數據: ``` <pre class="calibre18"> ``` <span class="hljs-operator"><span class="hljs-number"><?php</span><span class="hljs-keyword">namespace</span> <span class="hljs-title">app</span>\<span class="hljs-title">index</span>\<span class="hljs-title">model</span>; <span class="hljs-keyword">use</span> <span class="hljs-title">think</span>\<span class="hljs-title">Model</span>; <span class="hljs-operator"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span></span>{ <span class="hljs-comment">// 定義類型轉換</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$type</span> = [ <span class="hljs-string">'birthday'</span> => <span class="hljs-string">'timestamp:Y/m/d'</span>, ]; <span class="hljs-comment">// 定義自動完成的屬性</span><span class="hljs-keyword">protected</span> <span class="hljs-regexp">$insert</span> = [<span class="hljs-string">'status'</span>]; <span class="hljs-comment">// status修改器</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setStatusAttr</span><span class="hljs-number">(<span class="hljs-regexp">$value</span>, <span class="hljs-regexp">$data</span>)</span></span>{ <span class="hljs-keyword">return</span> <span class="hljs-string">'流年'</span> == <span class="hljs-regexp">$data</span>[<span class="hljs-string">'nickname'</span>] ? <span class="hljs-number">1</span> : <span class="hljs-number">2</span>; } <span class="hljs-comment">// status讀取器</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getStatusAttr</span><span class="hljs-number">(<span class="hljs-regexp">$value</span>)</span></span>{ <span class="hljs-regexp">$status</span> = [-<span class="hljs-number">1</span> => <span class="hljs-string">'刪除'</span>, <span class="hljs-number">0</span> => <span class="hljs-string">'禁用'</span>, <span class="hljs-number">1</span> => <span class="hljs-string">'正常'</span>, <span class="hljs-number">2</span> => <span class="hljs-string">'待審核'</span>]; <span class="hljs-keyword">return</span> <span class="hljs-regexp">$status</span>[<span class="hljs-regexp">$value</span>]; } <span class="hljs-comment">// email查詢</span><span class="hljs-keyword">protected</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">scopeEmail</span><span class="hljs-number">(<span class="hljs-regexp">$query</span>)</span></span>{ <span class="hljs-regexp">$query</span>->where(<span class="hljs-string">'email'</span>, <span class="hljs-string">'thinkphp@qq.com'</span>); } <span class="hljs-comment">// 全局查詢范圍</span><span class="hljs-keyword">protected</span> <span class="hljs-keyword">static</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">base</span><span class="hljs-number">(<span class="hljs-regexp">$query</span>)</span></span>{ <span class="hljs-comment">// 查詢狀態為1的數據</span><span class="hljs-regexp">$query</span>->where(<span class="hljs-string">'status'</span>,<span class="hljs-number">1</span>); } }</span> ``` ``` 當使用下面的查詢操作 ``` <pre class="calibre18"> ``` <span class="hljs-operator"><span class="hljs-title1">UserModel</span>:<span class="hljs-string">:<span class="hljs-function">scope</span>(<span class="hljs-operator">'email'</span>)-><span class="hljs-function">all</span>()</span></span>; ``` ``` 最后生成的SQL語句是: ``` <pre class="calibre18"> ``` <span class="hljs-operator">SELECT * <span class="hljs-keyword">FROM</span> <span class="hljs-string">`think_user`</span> <span class="hljs-keyword">WHERE</span> <span class="hljs-string">`email`</span> = <span class="hljs-string">'thinkphp@qq.com'</span> <span class="hljs-keyword">AND</span> <span class="hljs-string">`status`</span> = <span class="hljs-number">1</span> <span class="hljs-keyword">ORDER</span> <span class="hljs-keyword">BY</span> <span class="hljs-string">`id`</span> <span class="hljs-keyword">desc</span> </span> ``` ``` 每次查詢都會自動帶上全局查詢范圍的查詢條件。
                  <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>

                              哎呀哎呀视频在线观看