Maison  >  Article  >  développement back-end  >  Cas d'implémentation de champs associés avec fonction de recherche et de tri dans le framework Yii

Cas d'implémentation de champs associés avec fonction de recherche et de tri dans le framework Yii

黄舟
黄舟original
2017-10-23 09:06:451064parcourir

1. Introduction

Cela fait presque deux mois que je suis entré en contact avec le framework yii, mais ma compréhension du framework yii n'est pas très approfondie, je n'ai pas étudié systématiquement, je fais juste. Lorsque je travaille sur un projet, je ne me tourne vers le manuel que lorsque je rencontre quelque chose que je ne comprends pas.

Dans le projet précédent, il était nécessaire d'afficher les champs des tables associées et de fournir des fonctions de recherche et de tri. Je n'avais jamais rencontré cela auparavant, j'ai donc recherché des informations pertinentes dans le manuel et j'ai écrit ceci. , et j'ai pris quelques notes sur Youdao Cloud. Aujourd'hui, c'est le week-end et j'ai le temps de l'organiser dans un blog.

Sans plus attendre, passons directement aux étapes.

2. Étapes de l'opération

Contexte : Ici, ajoutez les champs de la table d'association à la CURL générée automatiquement par GII.

Condition : Il y a un champ pt_id dans la table A associé à la table B ; il faut maintenant ajouter la valeur du nom du champ associé à la table B en fonction du CURL généré en fonction du GII de la table A, et avec une fonction de recherche et de tri.

2.1. Étape 1 Ajouter une méthode dans un modèle


1 //意思即获取Pt的数据
2 public function getPt()    //get**  get后面任意
3 {
4     //模型名:className(),B表字段=>A表对应字段 
5     return $this->hasOne(Pt::className(), ['id' => 'ptid']); 
6 }

Étape 2 Ajouter l'association requise dans A. Variables du champ de recherche


1 public $name;   //可以关联显示多个字段
2 public $*****;  //例子

2.3 Modifier la fonction de recherche dans une recherche


1 //search函数中添加 表示在SQL语句中增加关联查询
2 //看起来是那么的熟悉,哈哈
3 $query->joinWith(['pt']);   //这里等待pt中的值就是step1中get后面的命名

2.4. Définir la configuration du tri dans une recherche


 1 //这里存放的是可以排序的字段 
 2 //如果A Search已经存在setSort,则其他动,只需要添加新的字段就可以了 
 3 //但是,我的yii 2生成的Search不存在这个排序,因此就需要额外添加了 
 4 //注意:当你的search中不存在这个配置时,即表明默认配置里面有设置过,当你在这里添加一个setSort则将会覆盖默认配置,之前默认有排序功能的字段将会失效 
 5 $dataProvider->setSort( 
 6 'attributes'=>[ 
 7 //====添加新字段排序配置= 
 8 'name'=>[ 
 9 'asc'=>['name' => SORT_ASC],
 10 'desc'=>['name' => SORT_DESC],
 11 'lable'=>'name',
 12 ],
 13 //==================
 14 ]
 15 );

2.5 Ajouter une configuration de filtrage de recherche.


1 //在代码里面照着队形添加这一句即可
2 //like,关联表全名,this->name
3 $query->andFilterWhere(['like', '**_pt.name', $this->name]) ;

2.6 Modifier la vue grille dans la vue index


 1 'columns' => [ 
 2 //=========== 
 3 //添加 
 4 [ 
 5           'attribute' => 'name', 
 6           'label' => '平台', 
 7           'value' => 'pt.name', 
 8           'filter' => Html::activeTextInput($searchModel, 'name', [ 
 9               'class' => 'form-control'
 10           ]),
 11 ],
 12 //=============
 13 ]

À ce stade, c'est plus de la moitié fait. Lorsque vous accédez à ce contrôleur, vous pouvez déjà voir l'effet de page, mais cela ne fonctionne pas lors de la recherche. Pourquoi ?

Parce que les informations de terrain que vous avez soumises à ce moment sont dangereuses et ne sont pas enregistrées dans le programme.

2.7. Définir le niveau de sécurité pour ce champ


1 //在A Search中的设置规则方法中添加
2 //name字段为safe3 [['name'], safe]

Terminé ! !

3. Résumé

Ceci n'est qu'un petit exemple, grâce à cet exemple, vous pouvez savoir comment ajouter des champs associés dans Yii, puis vous pouvez l'utiliser en fonction. la Connaissance existante change les choses de plusieurs manières. . . .

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!

Déclaration:
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