Maison développement back-end tutoriel php Exemples détaillés de fonctionnement d'associations multi-tables dans YII2

Exemples détaillés de fonctionnement d'associations multi-tables dans YII2

Jul 22, 2017 pm 03:02 PM
yii2 如何 操作

Récemment, j'ai rencontré des problèmes liés à l'association multi-tables YII2 au travail. J'ai constaté qu'il n'y avait pas beaucoup d'informations sur cet aspect sur Internet, j'ai donc pensé à faire le tri moi-même pour pouvoir m'y référer lorsque j'en ai besoin. J'en ai besoin à l'avenir ou les amis qui en ont besoin peuvent s'y référer. L'article suivant vous présente principalement l'utilisation des associations multi-tables dans YII2. Les amis qui en ont besoin peuvent y jeter un œil ci-dessous.

Préface

Cet article donne une brève introduction à la requête associée à plusieurs tables de YII2.0. L'article le présente en détail à travers un exemple de code. Je ne dirai pas grand-chose ci-dessous. Jetons un coup d'œil à l'introduction détaillée :

Tout d'abord, expliquons la structure de la table

Structure des tables

Maintenant, il existe une table de commande, une table d'utilisateur, une table de liste de produits, une table d'inventaire de produits

Dans YII, si vous souhaitez associer directement d'autres tables pour une requête, vous devez d'abord définir leur association dans le modèle

Commande


class Order extends \yii\db\ActiveRecord.{
 
 // 关联函数以get+要关联的数据表名来命名
 // 这是获取下订单的客户
 public function getUser(){
  
  // 第一个参数为要关联的子表模型类名,
  // 第二个参数指定 通过子表的user_id,关联主表的usesr_id字段
  // 这里写清楚点大概意思就是User.user_id => Order.user_id
 return $this->hasMany(User::className(), ['user_id' => 'user_id']);
 }
}
Copier après la connexion

1. HasMany et hasOne utilisent

Il existe deux types. d'associations entre tables dans Yii2, Ils servent à préciser l'association entre deux modèles.

●Un-à-plusieurs : hasMany ●Un-à-un : hasOne


●Résultats de retour : Les résultats de retour de ces deux méthodes sont des objets yiidbActiveQuery (si vous souhaitez renvoie le formulaire final du tableau Standard, pensez à ajouter le paramètre asArray())


●Le premier paramètre : le nom de la classe du modèle associé.


●Le deuxième paramètre : est un tableau, où la clé est l'attribut dans le modèle associé et la valeur est l'attribut dans le modèle actuel.


Utilisation associée

Essayons maintenant d'obtenir une commande


//获取订单信息
$order = Order::findOne(1);
//根据订单信息获取到用户信息
$user = $order->user;
Copier après la connexion
Bien sûr, vous pouvez choisir d'utiliser la méthode with, qui semble plus simple. Le paramètre de with est le nom de la relation, qui est user.

< dans getUser défini dans le modèle. 🎜>


Le code ci-dessus générera et exécutera l'instruction SQL suivante
//返回订单信息(包括用户信息)
$order = Order::find(1)->with(&#39;user&#39;);
//或者
$order = Order::find(1)->getUser();
Copier après la connexion


SELECT * FROM order WHERE id=1;
SELECT * FROM user  WHERE user.user_id=order.user_id;
Copier après la connexion
Comme le montre le. ci-dessus, accéder à Il existe deux méthodes d'association

●S'il est appelé en tant que fonction, un objet ActiveQuery sera renvoyé ($customer->getOrders()->all())

            ●Si appelé en attribut, le résultat du modèle ($customer->orders) sera renvoyé directement


Cache des résultats associé

Si tel est le cas, le tableau de commande a changé. Nous espérons que si nous l'interrogeons à nouveau


vous constaterez qu'il n'y a aucun changement lorsque vous recevrez. la commande à nouveau. La raison en est que la base de données ne sera interrogée que lorsque $order->user est exécuté pour la première fois, et les résultats seront mis en cache et SQL ne sera pas exécuté lors des requêtes suivantes.
$user = $order->user;
Copier après la connexion

Et si vous souhaitez réexécuter SQL ? Vous pouvez exécuter


//先释放缓存
unset($order->user);
$order->user;
Copier après la connexion

Requête croisée
Voici la clé indiquer! Comme vous pouvez le voir sur le diagramme de structure de table ci-dessus, la table User et Order_goods ne sont pas directement liées. Ainsi, si nous voulons savoir quels produits l'utilisateur a acheté en fonction des informations de l'utilisateur, nous devons associer les deux tables via la table Order. Alors que faire ? La première est la couche modèle. Parce que nous vérifions en fonction de l'utilisateur, nous accédons à la couche de modèle Utilisateur pour définir l'association.

Utilisateur


public function getOrder() {
 return $this->hasMany(Order::className(), [&#39;user_id&#39; => &#39;user_id&#39;]);
}
 
public function getOrderGoods() {
 return $this->hasMany(OrderGoods::className(), [&#39;order_id&#39; => &#39;order_id&#39;])->
  via(&#39;order&#39;);
}
Copier après la connexion

Notez ici : getOrderGoods Les deux order_id fait référence au order_id dans la commande associée à getOrder, et le premier order_id fait référence au order_id dans OrderGoods. Mais ! Nous avons également la méthode la plus simple, qui consiste à utiliser des instructions SQL !


Il s'agit essentiellement de toute la partie connexe
$map = &#39;select
  user.name,
  order.id,
  order_goods.goods_id,
  goods.goods_name,
  stock.stock_count
  from user
  LEFT JOIN order   ON order.user_id = user.user_id
  LEFT JOIN order_goods ON order_goods.order_id = order.order_id
  LEFT JOIN goods   ON goods.goods_id = order_goods.goods_id
  LEFT JOIN stock   ON stock.goods_id = goods.goods_id&#39;;

$list1 = Article::findBySql($map)->asArray()->all();
Copier après la connexion

Résumé

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tutoriel d'utilisation de PyCharm : vous guide en détail pour exécuter l'opération Tutoriel d'utilisation de PyCharm : vous guide en détail pour exécuter l'opération Feb 26, 2024 pm 05:51 PM

PyCharm est un environnement de développement intégré (IDE) Python très populaire. Il fournit une multitude de fonctions et d'outils pour rendre le développement Python plus efficace et plus pratique. Cet article vous présentera les méthodes de fonctionnement de base de PyCharm et fournira des exemples de code spécifiques pour aider les lecteurs à démarrer rapidement et à maîtriser l'utilisation de l'outil. 1. Téléchargez et installez PyCharm Tout d'abord, nous devons nous rendre sur le site officiel de PyCharm (https://www.jetbrains.com/pyc

Qu'est-ce que sudo et pourquoi est-ce important ? Qu'est-ce que sudo et pourquoi est-ce important ? Feb 21, 2024 pm 07:01 PM

sudo (exécution du superutilisateur) est une commande clé dans les systèmes Linux et Unix qui permet aux utilisateurs ordinaires d'exécuter des commandes spécifiques avec les privilèges root. La fonction de sudo se reflète principalement dans les aspects suivants : Fournir un contrôle des autorisations : sudo réalise un contrôle strict sur les ressources système et les opérations sensibles en autorisant les utilisateurs à obtenir temporairement les autorisations de superutilisateur. Les utilisateurs ordinaires ne peuvent obtenir des privilèges temporaires via sudo qu'en cas de besoin et n'ont pas besoin de se connecter en permanence en tant que superutilisateur. Sécurité améliorée : en utilisant sudo, vous pouvez éviter d'utiliser le compte root lors des opérations de routine. L'utilisation du compte root pour toutes les opérations peut entraîner des dommages inattendus au système, car toute opération incorrecte ou imprudente bénéficiera de toutes les autorisations. et

Étapes et précautions de fonctionnement de Linux Deploy Étapes et précautions de fonctionnement de Linux Deploy Mar 14, 2024 pm 03:03 PM

Étapes de fonctionnement et précautions de LinuxDeploy LinuxDeploy est un outil puissant qui peut aider les utilisateurs à déployer rapidement diverses distributions Linux sur des appareils Android, permettant aux utilisateurs de découvrir un système Linux complet sur leurs appareils mobiles. Cet article présentera en détail les étapes de fonctionnement et les précautions de LinuxDeploy et fournira des exemples de code spécifiques pour aider les lecteurs à mieux utiliser cet outil. Étapes de l'opération : Installer LinuxDeploy : Tout d'abord, installez

Que faire si vous oubliez d'appuyer sur F2 pour le mot de passe de démarrage Win10 Que faire si vous oubliez d'appuyer sur F2 pour le mot de passe de démarrage Win10 Feb 28, 2024 am 08:31 AM

Vraisemblablement, de nombreux utilisateurs ont plusieurs ordinateurs inutilisés à la maison et ont complètement oublié le mot de passe de mise sous tension car ils n'ont pas été utilisés depuis longtemps. Ils aimeraient donc savoir quoi faire s'ils oublient le mot de passe ? Alors jetons un coup d’œil ensemble. Que faire si vous oubliez d'appuyer sur F2 pour le mot de passe de démarrage Win10 ? 1. Appuyez sur le bouton d'alimentation de l'ordinateur, puis appuyez sur F2 lorsque vous allumez l'ordinateur (différentes marques d'ordinateurs ont des boutons différents pour accéder au BIOS). 2. Dans l'interface du BIOS, recherchez l'option de sécurité (l'emplacement peut être différent selon les marques d'ordinateurs). Habituellement dans le menu des paramètres en haut. 3. Recherchez ensuite l’option SupervisorPassword et cliquez dessus. 4. À ce stade, l'utilisateur peut voir son mot de passe, et en même temps trouver Activé à côté et le basculer sur Dis.

Partage des étapes d'opération de capture d'écran du Huawei Mate60 Pro Partage des étapes d'opération de capture d'écran du Huawei Mate60 Pro Mar 23, 2024 am 11:15 AM

Avec la popularité des smartphones, la fonction capture d’écran est devenue l’une des compétences essentielles pour l’utilisation quotidienne des téléphones portables. En tant que l'un des téléphones mobiles phares de Huawei, la fonction de capture d'écran du Huawei Mate60Pro a naturellement attiré beaucoup d'attention de la part des utilisateurs. Aujourd'hui, nous partagerons les étapes de capture d'écran du téléphone mobile Huawei Mate60Pro, afin que tout le monde puisse prendre des captures d'écran plus facilement. Tout d'abord, le téléphone mobile Huawei Mate60Pro propose une variété de méthodes de capture d'écran et vous pouvez choisir la méthode qui vous convient en fonction de vos habitudes personnelles. Ce qui suit est une introduction détaillée à plusieurs interceptions couramment utilisées :

Comment désactiver le bouton d'action sur iPhone 15 Pro et 15 Pro Max Comment désactiver le bouton d'action sur iPhone 15 Pro et 15 Pro Max Nov 07, 2023 am 11:17 AM

Apple a apporté certaines fonctionnalités matérielles exclusives aux iPhone 15 Pro et 15 Pro Max, ce qui a attiré l’attention de tous. Nous parlons de montures en titane, de designs élégants, du nouveau chipset A17 Pro, d'un téléobjectif 5x passionnant, et bien plus encore. Parmi toutes les cloches et sifflets ajoutés aux modèles d’iPhone 15 Pro, le bouton d’action reste une fonctionnalité importante et importante. Inutile de dire que c'est un complément utile pour lancer des actions sur votre iPhone. Cela dit, vous pourriez accidentellement maintenir le bouton Action enfoncé et déclencher la fonctionnalité par inadvertance. Franchement, c'est énervant. Pour éviter cela, vous devez désactiver le bouton d'action sur les iPhone 15 Pro et 15 Pro Max. laisser

Boutons d'action personnalisés : explorez la personnalisation sur iPhone 15 Pro Boutons d'action personnalisés : explorez la personnalisation sur iPhone 15 Pro Sep 24, 2023 pm 03:05 PM

L'iPhone 15 Pro et l'iPhone 15 Pro Max d'Apple introduisent un nouveau bouton d'action programmable qui remplace le traditionnel interrupteur sonnerie/silencieux au-dessus des boutons de volume. Lisez la suite pour savoir à quoi sert le bouton Action et comment le personnaliser. Un nouveau bouton d'action sur les modèles Apple iPhone 15 Pro remplace le commutateur iPhone traditionnel qui active Ring et Silent. Par défaut, le nouveau bouton activera toujours les deux fonctions avec un appui long, mais vous pouvez également appuyer longuement pour exécuter une gamme d'autres fonctions, notamment un accès rapide à l'appareil photo ou à la lampe de poche, l'activation des mémos vocaux, le mode de mise au point, la traduction et fonctionnalités d'accessibilité telles que la loupe. Vous pouvez également l'associer à un seul raccourci, ouvrant ainsi une tonne d'autres possibilités.

Surveillance du défilement des pages Web CSS : surveillez les événements de défilement des pages Web et effectuez les opérations correspondantes Surveillance du défilement des pages Web CSS : surveillez les événements de défilement des pages Web et effectuez les opérations correspondantes Nov 18, 2023 am 10:35 AM

Surveillance du défilement des pages Web CSS : surveillez les événements de défilement des pages Web et effectuez les opérations correspondantes. Avec le développement continu de la technologie frontale, les effets et les interactions des pages Web deviennent de plus en plus riches et diversifiés. Parmi eux, la surveillance du défilement est une technologie courante qui peut effectuer certains effets spéciaux ou opérations basés sur la position de défilement lorsque l'utilisateur fait défiler la page Web. D'une manière générale, la surveillance du défilement peut être implémentée via JavaScript. Cependant, dans certains cas, nous pouvons également obtenir l'effet de surveillance du défilement via du CSS pur. Cet article présentera comment implémenter le défilement des pages Web via CSS

See all articles