Explication détaillée de l'utilisation des requêtes associées hasOne, hasMany et many-to-many dans Yii2

不言
Libérer: 2023-03-25 16:54:02
original
2306 Les gens l'ont consulté

Cet article présente principalement l'utilisation détaillée des requêtes associées hasOne, hasMany et many-to-many dans Yii2. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y 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? Parce 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 découvrir. jusqu’à présent. Un bénéfice commun. 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 ni d'autres. L'accent de cet article est 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 (le 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

Remarque : La table common_tag ici est 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 du tableau [_rated:yiidbBaseActiveRecord:private].

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 Lorsque la valeur de la requête associée ne peut pas être obtenue à l'aide de la sortie de code suivante (common_tag.name), cela signifie. votre table client doit avoir ce champ de nom et la valeur est vide. Une fois le nom répété, les champs de la table principale seront affichés en premier. La solution est : $model->getRelatedRecords().

 [
 'attribute' => 'tag_id',
 'value' => 'common_tag.name'
 ]
Copier après la connexion

Recommandations associées :

Méthode Yii2 pour implémenter la recherche simultanée de plusieurs champs


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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!