Yii 2.0分頁功能實現

來源:互聯網
上載者:User
這篇文章主要給大家介紹了關於利用Yii 2.0實現聯表查詢加搜尋分頁的方法,文中通過範例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來跟著小編一起學習學習吧。

前言

最近在學習yii2.0,在使用yii2.0過程中遇到一些問題,現將查詢搜尋分頁的方法整理如下,分享出來供大家參考學習,話不多說,來一起看看詳細的介紹:

主表:{{%article}}

關聯表:{{%article_class}}

方法如下

1、使用gii建立CRUD和search不詳述

2、在Article中添加的關聯內容,代碼#注釋部分


class Article extends \yii\db\ActiveRecord {  #關聯查詢1:這裡加上被關聯欄位  public $class_name; ...  public function rules()  {   return [    [['article_title','article_content'], 'required'],    [['article_content','article_title','article_class'], 'string'],    [['article_addtime', 'article_updatetime'], 'integer'],    [['article_title', 'article_author'], 'string', 'max' => 50],    #關聯查詢2:這裡加上safe驗證,表示該表單欄位無驗證規則    ['class_name','safe'],   ];  } ...  #關聯查詢3:擷取被關聯表 mysite_article_class  public function getArticleClass(){   /**   * 第一個參數為要關聯的子表模型類名稱,   * 第二個參數指定通過子表的 id 去關聯主表的 article_class 欄位   */   return $this->hasMany(ArticleClass::className(), ['id' => 'article_class']);  } ... }

3、在ArticleSearch中添加的查詢和關聯內容,代碼#注釋部分


class ArticleSearch extends Article {  #關聯查詢1:這裡加上被關聯欄位  public $class_name; ...  public function rules()  {   return [    [['id', 'article_addtime', 'article_updatetime'], 'integer'],    [['article_title', 'article_content', 'article_class', 'article_author'], 'safe'],    #關聯查詢2:這裡加上safe驗證,表示該表單欄位無驗證規則    ['class_name','safe'],   ];  } ...  public function search($params)  {   $query = Article::find();    // add conditions that should always apply here   #關聯查詢4:使用jionWith和select做關聯查詢   $query = Article::find();   $query->joinWith(['articleClass']);   $query->select("{{%article}}.*,{{%article_class}}.class_name");      $dataProvider = new ActiveDataProvider([    'query' => $query,   ]);      $this->load($params);   if (!$this->validate()) {    return $dataProvider;   }      // grid filtering conditions   #精確查詢   $query->andFilterWhere([    'id' => $this->id,    'article_addtime' => $this->article_addtime,    'article_updatetime' => $this->article_updatetime,    #關聯查詢5:添加被關聯欄位的精確查詢,這裡要跟view表單被查詢屬性一致, //   '{{%article_class}}.class_name' => $this->class_name,   ]);      #模糊查詢   $query->andFilterWhere(['like', 'article_title', $this->article_title])    ->andFilterWhere(['like', 'article_content', $this->article_content])    ->andFilterWhere(['like', 'article_class', $this->article_class])    ->andFilterWhere(['like', 'article_author', $this->article_author])    #關聯查詢5:添加被關聯欄位的精確查詢,這裡要跟view表單被查詢屬性一致,    ->andFilterWhere(['like', '{{%article_class}}.class_name', $this->class_name]);   return $dataProvider;  } ... }

4、在ArticleController中添加的分頁內容,代碼#注釋部分


public function actionIndex()  {    $article = new Article();   #查詢   $searchModel = new ArticleSearch();   $dataProvider = $searchModel->search(Yii::$app->request->queryParams);   #分頁   $dataProvider->pagination = ['pagesize' => '3'];   return $this->render('index', [    'dataProvider' => $dataProvider,    'model' => $article,    'searchModel' => $searchModel,   ]);  }

5、在index view中添加的表單內容,代碼#注釋部分


<?= GridView::widget([  'dataProvider' => $dataProvider,  #查詢表單  'filterModel' => $searchModel,  'columns' => [   [    'class' => 'yii\grid\SerialColumn',    'header' => '編號',   ], //  'article_class',   #注意這裡被關聯表欄位是{{%article_class}}.class_name,表單屬性這麼寫'attribute' => 'class_name',   #查詢結果就是被關聯表欄位值'value' => 'class_name',   [    'label'=>'文章分類',    'attribute' => 'class_name',    'value' => 'class_name',    ],   'article_title',   'article_addtime:datetime',   // 'article_updatetime:datetime',   // 'article_author',   [    'class' => 'yii\grid\ActionColumn',    'header' => '操作',   ],  ], ]); ?>

以上步驟完成結果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.