<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] # 使用joinWith實現左聯接 用模型進行聯表查詢之前最好先給模型定義好模型關系,假設Article模型的`getUser`這個getter是通過hasOne返回文章的發表用戶模型,則要一次性用join方法查出來是這樣: ~~~php //SELECT `article`.* FROM `article` LEFT JOIN `user` ON `article`.`user_id` = `user`.`id` WHERE `article`.`id`=1 $article = Article::find() ->where(['article.id' => 1]) ->joinWith('user') ->orderBy(['user.id' => SORT_DESC]) ->one(); echo $article->title; echo $article->user->name; //不會產生查詢,因為上面join的時候已經查過了,所以user模型已經生成 ~~~ 其中要注意where的條件要聲明表名以區分條件字段,否則容易造成同名字段沖突 # 使用innerJoinWith實現內聯接 查詢所有文章以及作者 ~~~php //SELECT * FROM `article` INNER JOIN `user` ON `article`.`user_id` = `user`.`id` WHERE `article`.`id` IN (1,2,3) $articles = Article::find()->innerJoinWith('user')->where(['in', 'article.id', [1, 2, 3]])->all(); foreach($articles as $article){ echo $article->user->name; //不會產生查詢 } ~~~ # 指定表別名 ~~~php Article::find()->joinWith(['user u'])->orderBy(['u.id' => SORT_DESC])…… ~~~ # 多表聯接 ~~~php /* SELECT * FROM article LEFT JOIN user on article.user_id = user.id LEFT JOIN article_type ON article.type_id = article_type.id …… */ Article::find()->joinWith(['user', 'articleType'])…… ~~~ 這樣就會調用Article::getUser和Article::getArticleType兩個方法來獲取關系并構造聯表了 聯表方法本來是可以接收一個字符串作為快速聯單表的,如果要聯多表,就像上面這樣寫成數組,然后一個數組元素就是一個聯表,你要聯多少表就堆多少個元素吧![](http://www.kkh86.com/it/face/fengkuanggongji.gif) # join的時候在on條件里追加更多條件 以上例子中都只是單純地拿兩個表的關系字段做on對等比較,如果有自己自定義需求可以用`onCondition`方法: ~~~php //SELECT `article`.* FROM `article` LEFT JOIN `user` ON (`article`.`user_id` = `user`.`id`) AND (`user`.`status` = 1) WHERE `article`.`id`=1 $article = Article::find() ->where(['article.id' => 1]) ->joinWith([ 'user' => function($arQuery){ $arQuery->onCondition(['user.status' => 1]); //重點 } ]) ->one(); echo $article->title; echo $article->user->name; //不會產生查詢,因為上面join的時候已經查過了,所以user模型已經生成 ~~~ 這個條件追加與[AR模型查詢優化](http://www.kkh86.com/it/yii2/guide-db-ar-select.html)里面的**在with時追加其它條件**小節的做法是一樣的,把joinWith或innerJoinWith里的參數換成數組,key是關聯屬性名稱(對應的模型getter),value是一個回調,接收一個AR查詢器,通過這個AR查詢器用onCondition來追加條件 但不能用這樣的鏈式查詢來實現:`joinWith('user')->onCondition($condition)->all()`這是無效的代碼 其中onCondition方法的條件聲明和where是一樣的
                  <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>

                              哎呀哎呀视频在线观看