Implémentation de la fonction de pagination Yii 2.0

巴扎黑
Libérer: 2023-03-14 17:36:02
original
1195 Les gens l'ont consulté

Cet article vous présente principalement la méthode d'utilisation de Yii 2.0 pour implémenter une requête de table conjointe et une pagination de recherche. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de tous les amis qui en ont besoin. Apprenons-le avec l'éditeur ci-dessous.

Avant-propos

J'ai récemment appris yii2.0 et j'ai rencontré quelques problèmes lors de l'utilisation de yii2.0. Je vais maintenant interroger et rechercher. pagination. Les méthodes sont organisées comme suit et partagées pour la référence et l'étude de chacun. Sans plus tarder, jetons un coup d'œil à l'introduction détaillée :

Tableau principal : {{%article}}
.

Table d'association : {{%article_class}}

La méthode est la suivante

1. gii pour créer CRUD et rechercher sans détails

2 Le contenu associé ajouté dans l'article, code # partie commentaire


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']); 
 } 
... 
}
Copier après la connexion

3. La requête ajoutée dans ArticleSearch et contenu associé, code # partie commentaire


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; 
 } 
... 
}
Copier après la connexion

4. Contenu de pagination ajouté dans ArticleController, code # partie commentaire


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, 
  ]); 
 }
Copier après la connexion

5. Le contenu du formulaire ajouté dans la vue index, code # partie commentaire


<?= 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;, 
  ], 
 ], 
]); ?>
Copier après la connexion

Le résultat de ce qui précède Les étapes sont comme indiqué sur la figure :

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal