Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierung der Yii 2.0-Paging-Funktion

Implementierung der Yii 2.0-Paging-Funktion

巴扎黑
巴扎黑Original
2017-08-06 16:07:241196Durchsuche

Dieser Artikel führt Sie hauptsächlich in die Methode zur Verwendung von Yii 2.0 zur Implementierung gemeinsamer Tabellenabfragen und Suchseiten ein. Der Artikel stellt sie anhand von Beispielcodes detailliert vor Lassen Sie uns mit dem untenstehenden Herausgeber lernen.

Vorwort

Ich habe kürzlich yii2.0 gelernt und bin bei der Verwendung von yii2.0 auf einige Probleme gestoßen. Jetzt werde ich nachfragen und suchen Die Methoden sind wie folgt organisiert und zum Nachschlagen und Studieren für alle zugänglich: Werfen wir einen Blick auf die ausführliche Einführung:

Haupttabelle: {{%article}}

Assoziationstabelle: {{%article_class}}

Die Methode ist wie folgt

1 gii, um CRUD zu erstellen und ohne Details zu suchen

2 Der zugehörige Inhalt wurde im Artikel hinzugefügt, Code # Kommentarteil


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. Die in ArticleSearch und zugehörigem Inhalt hinzugefügte Abfrage, Code # Kommentarteil


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. Paginierungsinhalt hinzugefügt in ArticleController, Code # Kommentarteil


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. Der in der Indexansicht hinzugefügte Formularinhalt, Code # Kommentarteil


<?= GridView::widget([ 
 &#39;dataProvider&#39; => $dataProvider, 
 #查询表单 
 &#39;filterModel&#39; => $searchModel, 
 &#39;columns&#39; => [ 
  [ 
   &#39;class&#39; => &#39;yii\grid\SerialColumn&#39;, 
   &#39;header&#39; => &#39;编号&#39;, 
  ], 
//  &#39;article_class&#39;, 
  #注意这里被关联表字段是{{%article_class}}.class_name,表单属性这么写&#39;attribute&#39; => &#39;class_name&#39;, 
  #查询结果就是被关联表字段值&#39;value&#39; => &#39;class_name&#39;, 
  [ 
   &#39;label&#39;=>&#39;文章分类&#39;, 
   &#39;attribute&#39; => &#39;class_name&#39;, 
   &#39;value&#39; => &#39;class_name&#39;, 
 
  ], 
  &#39;article_title&#39;, 
  &#39;article_addtime:datetime&#39;, 
  // &#39;article_updatetime:datetime&#39;, 
  // &#39;article_author&#39;, 
  [ 
   &#39;class&#39; => &#39;yii\grid\ActionColumn&#39;, 
   &#39;header&#39; => &#39;操作&#39;, 
  ], 
 ], 
]); ?>

Das Ergebnis der obigen Ausführung Schritte sind wie in der Abbildung dargestellt:

Das obige ist der detaillierte Inhalt vonImplementierung der Yii 2.0-Paging-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn