Table des matières
yii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord
Maison développement back-end tutoriel php yii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord_PHP教程

yii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord_PHP教程

Jul 11, 2016 am 10:36 AM
act activerecord yii2 association 实现 搜索 de

yii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord

一个老生常谈的问题。最近通过群里的反馈,觉得很多人还是没有去理解这个问题。今天把这个问题讲明白了,看看yii2 ActiveRecord是怎么个多表关联以及如何去优化这个关联。

场景需求:

假设我们有一张用户表user和一张用户渠道表auth,两张数据表通过user.id和auth.uid进行一对一关联。现需要在user列表展示auth表的来源渠道source,且该渠道可搜索。

首先我们先通过gii生成user和auth系列相关的model和操作。此处不做详细说明,有关gii的操作可参考xxx

我看继续看重要的几个操作步骤:

1、找到user表对应的AR模型类 common\models\User.php,在该类文件中进行关联auth表

<span>/*</span><span>*
 *  关联auth表<br /> * @see http://www.manks.top/yii2_many_ar_relation_search.html
 </span><span>*/</span>
<span>public</span> <span>function</span><span> getAuth()
{
    </span><span>//</span><span> hasOne要求返回两个参数 第一个参数是关联表的类名 第二个参数是两张表的关联关系 
    // 这里uid是auth表关联id, 关联user表的uid id是当前模型的主键id</span>
    <span>return</span> <span>$this</span>->hasOne(common\models\Auth::className(), ['uid' => 'id'<span>]);
}</span>
Copier après la connexion

设置好了之后,并不代表两张数据表自动进行关联了!我们访问user列表页(该列表页采用gii生成,目前我们没操作过),通过debug查看Database Queries不难发现,实际中的query并没有进行关联auth表

2、在gridview中添加关联表的来源渠道字段source

<?= GridView::<span>widget([
    </span><span>//</span><span> other codes</span>
    'columns' =><span> [
        </span><span>//</span><span> other columns</span>
        'auth.source',<span>
    ]
]); </span>?>
Copier après la connexion

有同学感觉疑问了,上面不是说了没进行关联吗,这个怎么可以直接使用auth.source?

先别急,此时我们打开debug看看实际的query。

我们会发现有很多类似 select * from `auth` where uid = xxx;之类的操作,如果你的分页默认20条数据时,会有20个类似的query。

我们先搞明白发生了什么?

实际上这属于php的基础知识了。读取和写入对象的一个不存在的成员变量时, __get() __set() 魔术函数会被自动调用。yii也是利用了这一点对其进行了实现!

该操作跟大部分人在gridview中封装方法获取关联表数据几乎一致,但是!20条sql的查询明显增加了众多的开销。如果这里是left join操作多好!

3、优化sql

我们需要优化的是:

20条sql变1条sql

只获取关联表需要的字段

有同学要嚷嚷了,这里是yii自带的操作,怎么优化?我们回到数据源的获取上,发现user列表的数据是通过userSearch model的search方法提供的。

也就是说我们的数据查询实际上就没有去进行关联表查询!既然如此,我们就在UserSearch加上关联查询

<span>$query</span> = User::<span>find();
</span><span>$query</span>->joinWith(['auth'<span>]);
</span><span>$query</span>->select("user.*, auth.source");
Copier après la connexion

我们再来刷新下user列表页,然后通过debug分析发现有两条sql引起了我们的注意

SELECT `user`.*, `auth`.`source` FROM `user` LEFT <span>JOIN</span> `auth` ON `user`.`id` = `auth`.`uid` LIMIT 20<span>
SELECT </span>* FROM `auth` WHERE `user_id` IN (20个uid);
Copier après la connexion

也就是说我么已经达到了优化sql的目的,通过debug分析发现,DB的查询时间少了很多。

4、关联表字段增加查询

gridview中的搜索模型也是通过searchModel实现的,该模型通过rules控制着哪个字段可搜索,哪个字段不可搜索。

我们现在需要增加关联表的source可搜索,因此我们在searchModel中定义一个属性source且添加到rules中

<span>public</span> <span>$source</span><span>;
</span><span>public</span> <span>function</span><span> rules()
{
    </span><span>return</span><span> [
    </span><span>//</span><span> other rules</span>
        ['source', 'safe'],<span>
    ];
}</span>
Copier après la connexion

接着我们把gridview中的auth.source修改一下

<span>//</span><span> 'auth.source',</span>
<span>[
    </span>'attribute' => 'source',
    'value' => 'auth.source',
    'label' => '渠道来源',<span>
]</span>,
Copier après la connexion

到这里我们界面上是ok的,要实现程序上的搜索还差一步,我们在数据源获取的地方加上新增的source条件即可

<span>$query</span>-><span>andFilterWhere([
    </span><span>//</span><span> other params</span>
    'auth.source' => <span>$this</span>->source,<span>
]);</span>
Copier après la connexion

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1140067.htmlTechArticleyii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord 一个老生常谈的问题。最近通过群里的反馈,觉得很多人还是没有去理解这个...
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
3 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)

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Mar 24, 2024 am 11:27 AM

Comment mettre en œuvre la double connexion WeChat sur les téléphones mobiles Huawei ? Avec l’essor des réseaux sociaux, WeChat est devenu l’un des outils de communication indispensables dans la vie quotidienne des gens. Cependant, de nombreuses personnes peuvent rencontrer un problème : se connecter à plusieurs comptes WeChat en même temps sur le même téléphone mobile. Pour les utilisateurs de téléphones mobiles Huawei, il n'est pas difficile d'obtenir une double connexion WeChat. Cet article explique comment obtenir une double connexion WeChat sur les téléphones mobiles Huawei. Tout d'abord, le système EMUI fourni avec les téléphones mobiles Huawei offre une fonction très pratique : l'ouverture d'une double application. Grâce à la fonction de double ouverture de l'application, les utilisateurs peuvent simultanément

Comment rechercher des utilisateurs à Xianyu Comment rechercher des utilisateurs à Xianyu Feb 24, 2024 am 11:25 AM

Comment Xianyu recherche-t-il des utilisateurs ? Dans le logiciel Xianyu, nous pouvons trouver directement les utilisateurs avec lesquels nous souhaitons communiquer dans le logiciel. Mais je ne sais pas comment rechercher des utilisateurs. Visualisez-le simplement parmi les utilisateurs après la recherche. Vient ensuite l'introduction que l'éditeur propose aux utilisateurs sur la façon de rechercher des utilisateurs. Si vous êtes intéressé, venez jeter un œil ! Comment rechercher des utilisateurs dans Xianyu ? Réponse : Afficher les détails parmi les utilisateurs recherchés Introduction : 1. Entrez le logiciel et cliquez sur la zone de recherche. 2. Entrez le nom d'utilisateur et cliquez sur Rechercher. 3. Sélectionnez ensuite [Utilisateur] sous la zone de recherche pour trouver l'utilisateur correspondant.

La table WPS ne trouve pas les données que vous recherchez, veuillez vérifier l'emplacement de l'option de recherche La table WPS ne trouve pas les données que vous recherchez, veuillez vérifier l'emplacement de l'option de recherche Mar 19, 2024 pm 10:13 PM

À l'ère dominée par l'intelligence, les logiciels de bureautique sont également devenus populaires et les formulaires Wps sont adoptés par la majorité des employés de bureau en raison de leur flexibilité. Au travail, nous devons non seulement apprendre à créer des formulaires simples et à saisir du texte, mais également à maîtriser des compétences plus opérationnelles afin d'accomplir les tâches du travail réel. Les rapports contenant des données et l'utilisation de formulaires sont plus pratiques, clairs et précis. La leçon que nous vous apportons aujourd'hui est la suivante : la table WPS ne trouve pas les données que vous recherchez. Pourquoi veuillez vérifier l'emplacement de l'option de recherche ? 1. Sélectionnez d'abord le tableau Excel et double-cliquez pour l'ouvrir. Ensuite dans cette interface, sélectionnez toutes les cellules. 2. Ensuite, dans cette interface, cliquez sur l'option « Modifier » dans « Fichier » dans la barre d'outils supérieure. 3. Deuxièmement, dans cette interface, cliquez sur «

Guide de programmation PHP : méthodes pour implémenter la séquence de Fibonacci Guide de programmation PHP : méthodes pour implémenter la séquence de Fibonacci Mar 20, 2024 pm 04:54 PM

Le langage de programmation PHP est un outil puissant pour le développement Web, capable de prendre en charge une variété de logiques et d'algorithmes de programmation différents. Parmi eux, l’implémentation de la séquence de Fibonacci est un problème de programmation courant et classique. Dans cet article, nous présenterons comment utiliser le langage de programmation PHP pour implémenter la séquence de Fibonacci et joindrons des exemples de code spécifiques. La suite de Fibonacci est une suite mathématique définie comme suit : le premier et le deuxième élément de la suite valent 1, et à partir du troisième élément, la valeur de chaque élément est égale à la somme des deux éléments précédents. Les premiers éléments de la séquence

Comment rechercher des magasins sur mobile Taobao Comment rechercher des noms de magasins Comment rechercher des magasins sur mobile Taobao Comment rechercher des noms de magasins Mar 13, 2024 am 11:00 AM

Le logiciel de l'application mobile Taobao propose de nombreux bons produits. Vous pouvez les acheter à tout moment et n'importe où, et tout est authentique. Il n'y a aucune opération compliquée, ce qui vous permet de faire des achats plus pratiques. Vous pouvez rechercher et acheter librement à votre guise. Les sections de produits des différentes catégories sont toutes ouvertes. Ajoutez votre adresse de livraison personnelle et votre numéro de contact pour permettre à l'entreprise de messagerie de vous contacter, et vérifiez les dernières tendances logistiques en temps réel. les utilisateurs l'utilisent pour la première fois. Si vous ne savez pas comment rechercher des produits, il vous suffit bien sûr de saisir des mots-clés dans la barre de recherche pour trouver tous les résultats des produits. Vous ne pouvez pas arrêter d'acheter librement. L'éditeur fournira des méthodes en ligne détaillées permettant aux utilisateurs mobiles de Taobao de rechercher des noms de magasins. 1. Ouvrez d'abord l'application Taobao sur votre téléphone mobile,

Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Comment implémenter la fonction de clonage WeChat sur les téléphones mobiles Huawei Mar 24, 2024 pm 06:03 PM

Comment mettre en œuvre la fonction de clonage WeChat sur les téléphones mobiles Huawei Avec la popularité des logiciels sociaux et l'importance croissante accordée à la confidentialité et à la sécurité, la fonction de clonage WeChat est progressivement devenue le centre d'attention. La fonction de clonage WeChat peut aider les utilisateurs à se connecter simultanément à plusieurs comptes WeChat sur le même téléphone mobile, ce qui facilite la gestion et l'utilisation. Il n'est pas difficile de mettre en œuvre la fonction de clonage WeChat sur les téléphones mobiles Huawei. Il vous suffit de suivre les étapes suivantes. Étape 1 : Assurez-vous que la version du système de téléphonie mobile et la version de WeChat répondent aux exigences. Tout d'abord, assurez-vous que la version de votre système de téléphonie mobile Huawei a été mise à jour vers la dernière version, ainsi que l'application WeChat.

Découvrez comment Golang offre des possibilités de développement de jeux Découvrez comment Golang offre des possibilités de développement de jeux Mar 16, 2024 pm 12:57 PM

Dans le domaine actuel du développement logiciel, Golang (langage Go), en tant que langage de programmation efficace, concis et hautement simultané, est de plus en plus favorisé par les développeurs. Sa riche bibliothèque de normes et ses fonctionnalités de concurrence efficaces en font un choix de premier plan dans le domaine du développement de jeux. Cet article explorera comment utiliser Golang pour le développement de jeux et démontrera ses puissantes possibilités à travers des exemples de code spécifiques. 1. Avantages de Golang dans le développement de jeux. En tant que langage typé statiquement, Golang est utilisé dans la construction de systèmes de jeux à grande échelle.

Guide de mise en œuvre des exigences du jeu PHP Guide de mise en œuvre des exigences du jeu PHP Mar 11, 2024 am 08:45 AM

Guide d'implémentation des exigences du jeu PHP Avec la popularité et le développement d'Internet, le marché des jeux Web devient de plus en plus populaire. De nombreux développeurs espèrent utiliser le langage PHP pour développer leurs propres jeux Web, et la mise en œuvre des exigences du jeu constitue une étape clé. Cet article explique comment utiliser le langage PHP pour implémenter les exigences courantes du jeu et fournit des exemples de code spécifiques. 1. Créer des personnages de jeu Dans les jeux Web, les personnages de jeu sont un élément très important. Nous devons définir les attributs du personnage du jeu, tels que le nom, le niveau, la valeur de l'expérience, etc., et fournir des méthodes pour les exploiter.

See all articles