Maison > développement back-end > tutoriel php > Exemples d'utilisation de requêtes associées hasOne, hasMany et many-to-many dans Yii2 (image)

Exemples d'utilisation de requêtes associées hasOne, hasMany et many-to-many dans Yii2 (image)

黄舟
Libérer: 2023-03-07 07:42:01
original
2162 Les gens l'ont consulté

hasOne et hasMany sont les fonctions uniques de Yii2 utilisées pour les requêtes d'association multi-tables. Il est recommandé de les utiliser lors de l'utilisation de requêtes d'association multi-tables. Cet article présente principalement l'utilisation détaillée des requêtes associées hasOne, hasMany et many-to-many dans Yii2. Les amis qui en ont besoin peuvent se référer à

Avant-propos

hasOne et hasMany sont les fonctions uniques de Yii2 pour les requêtes liées à plusieurs tables. Il est recommandé de les utiliser lors de l'utilisation de requêtes liées à plusieurs tables. Pourquoi? Étant donné que les résultats des requêtes associées de cette manière conserveront la propre fonction de tri d'en-tête de Yii2, ainsi que la valeur de stockage de l'identifiant de l'entrée dans CheckboxColumn, quant à savoir s'il existe

d'autres avantages, tout le monde doit les explorer. L'auteur À l'heure actuelle, ces deux avantages couramment utilisés ont été découverts. Il n'existe aucune autre requête associée, telle que la requête yiidbQuery ou la requête d'instruction SQL native. Lorsque la requête est affichée dans la liste, l'en-tête du tableau est noir.

Les requêtes hasOne et hasMany multi-tables de Yii2, qu'il s'agisse d'un document ou d'un article, peuvent en fait facilement trouver le maître de référence. Mais pourquoi l'auteur a-t-il écrit cet article ? dans Je n'ai pas vu l'utilisation de requêtes liées plusieurs-à-plusieurs dans les informations précédentes, je ne me répéterai pas ou ne répéterai pas d'autres. Cet article se concentre sur l'utilisation de requêtes liées plusieurs-à-plusieurs pour augmenter vos connaissances.

Analyse des exigences

1 Utilisez une instruction de requête pour afficher toutes les données de la liste. Relations un-à-un Plusieurs et plusieurs-à-plusieurs.

2. La fonction de tri d'en-tête de Yii2 et la valeur de stockage de l'identifiant de l'entrée dans CheckboxColumn ne peuvent pas être détruites.

Rendu

1. Un à un, un à plusieurs, plusieurs à plusieurs, tri d'en-tête.

2. La valeur identifiant de l'entrée dans CheckboxColumn.

Analyse de code

Plusieurs à plusieurs

Exemple : Un client peut avoir plusieurs étiquettes, et une étiquette peut être destinée à plusieurs clients.

1. Ajoutez le code suivant à TSales (

modèle de la table client) :

 public function getcommon_tag()
 { 
  return $this->hasMany(CommonTag::className(), ['itemid' => 't_id'])->onCondition(['idtype' => "内容"])->joinWith(['tag']);    
 }
Copier après la connexion

Notes : La table common_tag est ici une table intermédiaire, une fois la table intermédiaire common_tag associée à la table client à l'aide de hasMany, joinWith(['tag']) doit être ajouté à la fin pour associer la table de balises. onCondition est une méthode avec des conditions supplémentaires.

2. Ajoutez le code suivant au CommonTag (modèle de table intermédiaire) pour associer la table de balises, utilisez simplement hasOne.

public function gettag()
{ 
 return $this->hasOne(Tag::className(), ['id'=>'tagid']);
}
Copier après la connexion
3. Ajoutez le code suivant à TSalesSearch (modèle de recherche du client) pour associer la table intermédiaire common_tag : $query->joinWith(['common_tag']);

4. . Le code de sortie de la page est le suivant :

[
 'attribute' => 'tag_id',
 'value' => function ($model) { 
  $_tag=$model->getRelatedRecords()['common_tag'];
  if(!empty($_tag)){
   $tagName="";
   foreach ($_tag as $key => $value) {                        
   $tagName.=$value['tag']['name'].'/';
   }
   return rtrim($tagName,'/');
  } 
 },
],
Copier après la connexion
Remarque : $model->getRelatedRecords() est utilisé pour obtenir la valeur de [_rated:yiidbBaseActiveRecord:private]

array.

Un-à-plusieurs

1. hasMany impliqué dans l'utilisation plusieurs-à-plusieurs précédente est une utilisation un-à-plusieurs pour atteindre un-à-plusieurs. -many, supprimez simplement le joinWith à la fin. Les autres configurations et méthodes de sortie sont les mêmes.

One-to-one

1. L'utilisation individuelle est également mentionnée plus tôt. hasOne est une utilisation individuelle. le même que hasMany, donc ce n'est pas nécessaire ici.

Notes

1 Utilisez la sortie de code suivante (common_tag.name) pour obtenir la valeur du fichier associé. requête. Lorsque la valeur n'est pas trouvée, il faut que le champ de nom existe dans votre table client et que la valeur soit vide. Si le nom est répété, les champs de la table principale seront affichés en premier. model->getRelatedRecords() Obtenir.

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