Inhaltsverzeichnis
yii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord
Heim Backend-Entwicklung PHP-Tutorial yii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord_PHP教程

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

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

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>
Nach dem Login kopieren

设置好了之后,并不代表两张数据表自动进行关联了!我们访问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>?>
Nach dem Login kopieren

有同学感觉疑问了,上面不是说了没进行关联吗,这个怎么可以直接使用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");
Nach dem Login kopieren

我们再来刷新下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);
Nach dem Login kopieren

也就是说我么已经达到了优化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>
Nach dem Login kopieren

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

<span>//</span><span> 'auth.source',</span>
<span>[
    </span>'attribute' => 'source',
    'value' => 'auth.source',
    'label' => '渠道来源',<span>
]</span>,
Nach dem Login kopieren

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

<span>$query</span>-><span>andFilterWhere([
    </span><span>//</span><span> other params</span>
    'auth.source' => <span>$this</span>->source,<span>
]);</span>
Nach dem Login kopieren

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1140067.htmlTechArticleyii2 ActiveRecord多表关联以及多表关联搜索的实现,yii2activerecord 一个老生常谈的问题。最近通过群里的反馈,觉得很多人还是没有去理解这个...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So suchen Sie nach Benutzern in Xianyu So suchen Sie nach Benutzern in Xianyu Feb 24, 2024 am 11:25 AM

Wie sucht Xianyu nach Benutzern? In der Software Xianyu können wir die Benutzer, mit denen wir kommunizieren möchten, direkt in der Software finden. Aber ich weiß nicht, wie ich nach Benutzern suchen soll. Sehen Sie es sich nach der Suche einfach unter den Benutzern an. Als nächstes gibt der Herausgeber den Benutzern eine Einführung in die Suche nach Benutzern. Wenn Sie interessiert sind, schauen Sie vorbei! Wie suche ich nach Benutzern in Xianyu? Antwort: Details zu den Benutzern nach der Suche anzeigen: 1. Geben Sie die Software ein und klicken Sie auf das Suchfeld. 2. Geben Sie den Benutzernamen ein und klicken Sie auf Suchen. 3. Wählen Sie dann im Suchfeld [Benutzer] aus, um den entsprechenden Benutzer zu finden.

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mar 24, 2024 am 11:27 AM

Wie implementiert man die doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen? Mit dem Aufkommen der sozialen Medien ist WeChat zu einem unverzichtbaren Kommunikationsmittel im täglichen Leben der Menschen geworden. Viele Menschen können jedoch auf ein Problem stoßen: Sie können sich gleichzeitig auf demselben Mobiltelefon bei mehreren WeChat-Konten anmelden. Für Huawei-Mobiltelefonbenutzer ist es nicht schwierig, eine doppelte WeChat-Anmeldung zu erreichen. In diesem Artikel wird erläutert, wie eine doppelte WeChat-Anmeldung auf Huawei-Mobiltelefonen erreicht wird. Erstens bietet das EMUI-System, das mit Huawei-Mobiltelefonen geliefert wird, eine sehr praktische Funktion – das doppelte Öffnen von Anwendungen. Durch die doppelte Öffnungsfunktion der Anwendung können Benutzer gleichzeitig

Die WPS-Tabelle kann die gesuchten Daten nicht finden. Bitte überprüfen Sie den Speicherort der Suchoption Die WPS-Tabelle kann die gesuchten Daten nicht finden. Bitte überprüfen Sie den Speicherort der Suchoption Mar 19, 2024 pm 10:13 PM

In der von Intelligenz dominierten Ära ist auch Bürosoftware populär geworden, und WPS-Formulare werden aufgrund ihrer Flexibilität von der Mehrheit der Büroangestellten übernommen. Bei der Arbeit müssen wir nicht nur das einfache Erstellen von Formularen und die Texteingabe erlernen, sondern auch mehr operative Fähigkeiten beherrschen, um die Aufgaben in der tatsächlichen Arbeit erledigen zu können. Berichte mit Daten und die Verwendung von Formularen sind bequemer, klarer und genauer. Die Lektion, die wir Ihnen heute bringen, ist: Die WPS-Tabelle kann die von Ihnen gesuchten Daten nicht finden. Warum überprüfen Sie bitte den Speicherort der Suchoption? 1. Wählen Sie zunächst die Excel-Tabelle aus und doppelklicken Sie, um sie zu öffnen. Wählen Sie dann in dieser Schnittstelle alle Zellen aus. 2. Klicken Sie dann in dieser Benutzeroberfläche in der oberen Symbolleiste unter „Datei“ auf die Option „Bearbeiten“. 3. Zweitens klicken Sie in dieser Benutzeroberfläche auf „

PHP-Programmierhandbuch: Methoden zur Implementierung der Fibonacci-Folge PHP-Programmierhandbuch: Methoden zur Implementierung der Fibonacci-Folge Mar 20, 2024 pm 04:54 PM

Die Programmiersprache PHP ist ein leistungsstarkes Werkzeug für die Webentwicklung, das eine Vielzahl unterschiedlicher Programmierlogiken und Algorithmen unterstützen kann. Unter diesen ist die Implementierung der Fibonacci-Folge ein häufiges und klassisches Programmierproblem. In diesem Artikel stellen wir vor, wie Sie die Fibonacci-Folge mit der Programmiersprache PHP implementieren, und fügen spezifische Codebeispiele bei. Die Fibonacci-Folge ist eine mathematische Folge, die wie folgt definiert ist: Das erste und das zweite Element der Folge sind 1, und ab dem dritten Element ist der Wert jedes Elements gleich der Summe der beiden vorherigen Elemente. Die ersten paar Elemente der Sequenz

So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen Mar 24, 2024 pm 06:03 PM

So implementieren Sie die WeChat-Klonfunktion auf Huawei-Mobiltelefonen Mit der Popularität sozialer Software und der zunehmenden Bedeutung von Datenschutz und Sicherheit rückt die WeChat-Klonfunktion allmählich in den Mittelpunkt der Aufmerksamkeit der Menschen. Die WeChat-Klonfunktion kann Benutzern helfen, sich gleichzeitig bei mehreren WeChat-Konten auf demselben Mobiltelefon anzumelden, was die Verwaltung und Nutzung erleichtert. Es ist nicht schwierig, die WeChat-Klonfunktion auf Huawei-Mobiltelefonen zu implementieren. Sie müssen lediglich die folgenden Schritte ausführen. Schritt 1: Stellen Sie sicher, dass die Version Ihres Mobiltelefonsystems und die WeChat-Version den Anforderungen entsprechen. Stellen Sie zunächst sicher, dass die Version Ihres Huawei-Mobiltelefonsystems sowie die WeChat-App auf die neueste Version aktualisiert wurden.

So suchen Sie auf Mobilgeräten nach Geschäften Taobao So suchen Sie nach Geschäftsnamen So suchen Sie auf Mobilgeräten nach Geschäften Taobao So suchen Sie nach Geschäftsnamen Mar 13, 2024 am 11:00 AM

Die mobile Taobao-App-Software bietet viele gute Produkte, die Sie jederzeit und überall kaufen können. Der Preis für jedes Produkt ist völlig klar, sodass Sie bequemer einkaufen können. Sie können nach Belieben suchen und einkaufen. Fügen Sie Ihre persönliche Lieferadresse und Kontaktnummer hinzu, um die Kontaktaufnahme mit Ihnen zu erleichtern und die neuesten Logistiktrends in Echtzeit zu überprüfen Benutzer verwenden es zum ersten Mal. Wenn Sie nicht wissen, wie man nach Produkten sucht, müssen Sie natürlich nur Schlüsselwörter in die Suchleiste eingeben, um alle Produktergebnisse zu finden Der Herausgeber stellt mobilen Taobao-Benutzern detaillierte Online-Methoden für die Suche nach Geschäftsnamen zur Verfügung. 1. Öffnen Sie zunächst die Taobao-App auf Ihrem Mobiltelefon.

Meistern Sie, wie Golang Möglichkeiten für die Spieleentwicklung eröffnet Meistern Sie, wie Golang Möglichkeiten für die Spieleentwicklung eröffnet Mar 16, 2024 pm 12:57 PM

Im heutigen Bereich der Softwareentwicklung wird Golang (Go-Sprache) als effiziente, prägnante und hochgradig parallele Programmiersprache von Entwicklern zunehmend bevorzugt. Seine umfangreiche Standardbibliothek und die effizienten Parallelitätsfunktionen machen es zu einer hochkarätigen Wahl im Bereich der Spieleentwicklung. In diesem Artikel wird untersucht, wie man Golang für die Spieleentwicklung verwendet, und seine leistungsstarken Möglichkeiten anhand spezifischer Codebeispiele demonstriert. 1. Golangs Vorteile bei der Spieleentwicklung: Als statisch typisierte Sprache wird Golang beim Aufbau großer Spielsysteme verwendet.

Implementierungshandbuch für PHP-Spielanforderungen Implementierungshandbuch für PHP-Spielanforderungen Mar 11, 2024 am 08:45 AM

Implementierungsleitfaden für PHP-Spielanforderungen Mit der Popularität und Entwicklung des Internets erfreut sich der Markt für Webspiele immer größerer Beliebtheit. Viele Entwickler hoffen, die PHP-Sprache zur Entwicklung ihrer eigenen Webspiele nutzen zu können, und die Umsetzung der Spielanforderungen ist ein wichtiger Schritt. In diesem Artikel wird erläutert, wie Sie mithilfe der PHP-Sprache allgemeine Spielanforderungen implementieren und spezifische Codebeispiele bereitstellen. 1. Spielfiguren erstellen In Webspielen sind Spielfiguren ein sehr wichtiges Element. Wir müssen die Attribute des Spielcharakters wie Name, Level, Erfahrungswert usw. definieren und Methoden für deren Bedienung bereitstellen

See all articles