Heim > Backend-Entwicklung > PHP-Tutorial > Problem mit Laravel-Mehrtabellen-Assoziationsabfragen

Problem mit Laravel-Mehrtabellen-Assoziationsabfragen

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-08-27 09:06:52
Original
1684 Leute haben es durchsucht

Drei MySQL-Datentabellen

  • Produktliste (Produkt)

  • Paket

  • Paketinformationstabelle (package_data).

Hauptfelder der Produkttabelle:

  • id (selbst-inkrementierende ID)

  • Name

  • ...

Hauptfelder der Pakettabelle:

  • id (selbst-inkrementierende ID)

  • Titel(Paketname)

  • ....

Hauptfelder der Paketinformationstabelle:

  • id (selbst-inkrementierende ID)

  • product_id (Produkt-ID)

  • Paket-ID (Paket-ID)

  • product_num (Anzahl der Produkte)

  • ...

Einfache Anleitung:

Ein Paket enthält mehrere Produkte. Die Pakettabelle und die Paketinformationstabelle hätten jedoch in einer Tabelle platziert werden können. Um redundante Daten zu reduzieren, wurde die Pakettabelle jedoch einfach vertikal unterteilt.

Hier kommt das Problem :-)

  • Im obigen Fall möchte ich wissen, wie viele Produkte A in Paket A enthalten sind. Wie definiert man also die Beziehungen im Modell?

  • In der oben genannten Situation möchte ich wissen, wie viele Produkte A, Produkt B usw. insgesamt für Paket A und Paket B verwendet werden. Wie soll ich also vorgehen?

ps: Die oben genannten Fragen wurden in den offiziellen Dokumenten gelesen, aber mein IQ ist zu niedrig, was zu unklarem Verständnis führt, daher bin ich hier, um Sie um Rat zu bitten.

Ich freue mich auf Ihre enthusiastische Anleitung ^_^

Antwortinhalt:

Drei MySQL-Datentabellen

  • Produktliste (Produkt)

  • Paket

  • Paketinformationstabelle (package_data).

Hauptfelder der Produkttabelle:

  • id (selbst-inkrementierende ID)

  • Name

  • ...

Hauptfelder der Pakettabelle:

  • id (selbst-inkrementierende ID)

  • Titel(Paketname)

  • ....

Hauptfelder der Paketinformationstabelle:

  • id (selbst-inkrementierende ID)

  • product_id (Produkt-ID)

  • Paket-ID (Paket-ID)

  • product_num (Anzahl der Produkte)

  • ...

Einfache Anleitung:

Ein Paket enthält mehrere Produkte. Die Pakettabelle und die Paketinformationstabelle hätten jedoch in einer Tabelle platziert werden können. Um redundante Daten zu reduzieren, wurde die Pakettabelle jedoch einfach vertikal unterteilt.

Hier kommt das Problem :-)

  • Im obigen Fall möchte ich wissen, wie viele Produkte A in Paket A enthalten sind. Wie definiert man also die Beziehungen im Modell?

  • In der oben genannten Situation möchte ich wissen, wie viele Produkte A, Produkt B usw. insgesamt für Paket A und Paket B verwendet werden. Wie soll ich also vorgehen?

ps: Die oben genannten Fragen wurden in den offiziellen Dokumenten gelesen, aber mein IQ ist zu niedrig, was zu unklarem Verständnis führt, daher bin ich hier, um Sie um Rat zu bitten.

Ich freue mich auf Ihre enthusiastische Anleitung ^_^

Ähem~, endlich habe ich die Antwort im Dokument gefunden. Link hier. Bitte suchen Sie nach dem Abschnitt „Nested Eager Loading“, um ihn selbst anzuzeigen.

Sagen Sie mir den konkreten Prozess:

Die Methode hasManyData() ist im Paketmodell definiert

<code class="php">public function hasManyData()
{
    return $this->hasMany(PackageData::class, 'package_id', 'id');
}</code>
Nach dem Login kopieren

Die BelongsToProduct()-Methode ist im package_data-Modell definiert

<code class="php">public function BelongsToProduct()
{
    return $this->belongsTo(Product::class, 'product_id', 'id');
}</code>
Nach dem Login kopieren

Wird im Controller verwendet:

<code class="php">$packageList = Package::with('hasManyData', 'package_data.BelongsToProduct')->get();</code>
Nach dem Login kopieren

Du bist fertig!

Noch ein Plan

ps: Die von einem Kollegen angegebene Methode ist ungefähr so: Das Folgende ist der Pseudocode:

<code class="php">$packageList = Package::with('hasManyData')->get();

foreach( $packageList as $key => $val )
{
    ...
    $productList = PackageData::with('BelongsToProduct')->where(...)->get();
    ...
}</code>
Nach dem Login kopieren

Ich finde die Leistung schrecklich~ und ich möchte sie nicht mehr studieren! Mein Kopf ist etwas heiß, daher ist das, was ich geschrieben habe, etwas chaotisch. Bitte korrigieren Sie mich, wenn ich falsch liege. Vielen Dank an alle, die sich diese Ausgabe angesehen haben~

Verwandte Etiketten:
Quelle:php.cn
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage