亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Inhaltsverzeichnis
1. Verst?ndnis der polymorphen Beziehungen
2. Datenbankschema -Setup
3. Definieren Sie die Modelle
Im morphabbaren Modell (z. B. Post, Video)
Im polymorphen Modell (z. B. Kommentar)
4.. Verwenden der Beziehung
Erstellen Sie einen Kommentar für einen Beitrag
Erstellen Sie einen Kommentar für ein Video
Zugang zum Eigentümer
5. Eins-zu-eins-polymorphes Beispiel
Migration
Modelle
Verwendung
6. polymorphe Beziehungen abfragen
Holen Sie sich alle Kommentare zu Beitr?gen
Eifriger Belastung
7. Benutzerdefinierte Morph -Karte (optional, aber empfohlen)
Zusammenfassung
Heim PHP-Framework Laravel Wie man mit polymorphen Beziehungen in Laravel arbeitet

Wie man mit polymorphen Beziehungen in Laravel arbeitet

Aug 25, 2025 am 10:56 AM
laravel 多態(tài)關(guān)系

In polymorphen Beziehungen in Laravel k?nnen ein Modell wie Kommentar oder Bild zu mehreren Modellen wie Post, Video oder Benutzer anhand einer einzelnen Assoziation geh?ren. 2. Das Datenbankschema erfordert {relation} _id und {relation} _type spalten in einer commententabelle mit einem zusammengesetzten Index für die Leistung veranschaulicht. 3. Verwenden Sie in den Modellen Morphmany oder Morphon in den Eigentümermodellen (z. B. Post) und Morphto im polymorphen Modell (z. B. Kommentar) und entsprechen dem Beziehungsnamen mit dem Spaltenpr?fix. 4. Beim Erstellen von Datens?tzen legt Laravel automatisch die ID und Klasse in den Spalten _id und _type fest, wodurch dynamisches Eigentum erm?glicht wird. 5. Verwenden Sie für Einzelf?lle Morphone und Morphto, z. B. ein Bild, das entweder zu einem Benutzer oder einem Post geh?rt. 6. Polymorphe Beziehungen mit Verwenden oder direkten Anklauseln auf Typ und ID abfragen und mit ('Relation') zu eifrigen Lastbesitzern und zur Verhinderung von N 1 -Abfragen verwendet werden. 7. Definieren Sie optional eine benutzerdefinierte Morph -Karte in AppServiceProvider, um kurze String -Aliase anstelle der vollst?ndigen Klassennamen zu speichern, die Lesbarkeit zu verbessern und den Speicher zu verringern. Polymorphe Beziehungen bieten eine flexible und effiziente M?glichkeit, Funktionen über Modelle hinweg zu teilen und wiederverwendbare Funktionen wie Kommentare, Bilder oder Likes über verschiedene Modelltypen nahtlos zu erm?glichen.

Wie man mit polymorphen Beziehungen in Laravel arbeitet

Durch die Arbeit mit polymorphen Beziehungen in Laravel kann ein Modell zu mehr als einem anderen Modell zu einer einzigen Assoziation geh?ren. Dies ist nützlich, wenn Sie eine gemeinsame Beziehung über mehrere Modelle hinweg wünschen - beispielsweise Kommentare oder Bilder an Beitr?ge, Videos oder Benutzer anh?ngen, ohne für jeweils separate Tabellen zu erstellen.

Hier erfahren Sie, wie Sie polymorphe Beziehungen in Laravel effektiv aufbauen und verwenden.


1. Verst?ndnis der polymorphen Beziehungen

Mit einer polymorphen Beziehung k?nnen ein Modell (wie Comment oder Image ) zu mehreren anderen Modellen geh?ren (wie Post , Video , User ) mit einer einzelnen morphierbaren Beziehung.

Es gibt zwei Arten:

  • Eins-zu-eins-polymorph
  • Eins-zu-Many-polymorphes

Zum Beispiel:

  • Ein Comment kann entweder zu einem Post oder einem Video geh?ren.
  • Ein Image kann an ein Product , User oder Article beigefügt werden.

2. Datenbankschema -Setup

Um diese Arbeit zu machen, ben?tigen Sie zwei Spalten in Ihrer polymorphen Tabelle:

  • {model}_id - speichert die ID des zugeh?rigen Modells.
  • {model}_type - speichert den Klassennamen (vollst?ndig qualifiziert) des zugeh?rigen Modells.

Zum Beispiel für eine comments :

 Schema :: Create ('Kommentare', Funktion (Blueprint $ Tabelle) {
    $ table-> id ();
    $ table-> text ('K?rper');
    $ table-> unsignedBigInteger ('commentableable_id');
    $ table-> string ('commentable_type');
    $ table-> timestemps ();

    $ table-> index (['commentable_id', 'commentableable_type']);
});

Hier definieren commentable_id und commentable_type zusammen, welches Modell und aufzeichnen, zu dem der Kommentar geh?rt.


3. Definieren Sie die Modelle

Im morphabbaren Modell (z. B. Post, Video)

Diese Modelle k?nnen Kommentare haben . Sie definieren eine morphMany -Beziehung.

 // post.php
Klassenbeitrag erweitert das Modell
{
    ?ffentliche Funktion Kommentare ()
    {
        Return $ this-> Morpany (Kommentar :: Klasse, 'kommentierbar');
    }
}

// Video.php
Klassenvideo erweitert das Modell
{
    ?ffentliche Funktion Kommentare ()
    {
        Return $ this-> Morpany (Kommentar :: Klasse, 'kommentierbar');
    }
}

Das zweite Argument in morphMany ist der Name der Morph -Beziehung , die mit dem Pr?fix von commentable_id und commentable_type übereinstimmen sollte.

Im polymorphen Modell (z. B. Kommentar)

Dieses Modell geh?rt entweder zu einem Beitrag oder einem Video.

 // comment.php
Klassenkommentar erweitert das Modell
{
    ?ffentliche Funktion kommentierbar ()
    {
        return $ this-> morphto ();
    }
}

Die Methode morphTo() erkennt automatisch den Eigentümer des Kommentars basierend auf commentable_type und commentable_id .


4.. Verwenden der Beziehung

Erstellen Sie einen Kommentar für einen Beitrag

 $ post = post :: find (1);
$ comment = $ post-> comments ()-> erstellen ([
    'K?rper' => 'Toller Beitrag!'
]);

Laravel setzt automatisch:

  • commentable_id → 1
  • commentable_typeApp\Models\Post

Erstellen Sie einen Kommentar für ein Video

 $ Video = Video :: Find (2);
$ comment = $ Video-> comments ()-> erstellen ([
    'K?rper' => 'sch?nes Video!'
]);

Jetzt:

  • commentable_id → 2
  • commentable_typeApp\Models\Video

Zugang zum Eigentümer

 $ comment = comment :: Find (1);
$ besitzer = $ comment-> commentable; // Gibt die Post- oder Videoinstanz zurück

Laravel verwendet den commentable_type , um die Klasse zu bestimmen und l?dt das richtige Modell.


5. Eins-zu-eins-polymorphes Beispiel

Sagen Sie, ein User oder Post kann ein Image haben.

Migration

 Schema :: Create ('Bilder', Funktion (Blueprint $ Tabelle) {
    $ table-> id ();
    $ table-> string ('url');
    $ table-> unsignedBigInteger ('imagelable_id');
    $ table-> string ('bildable_type');
    $ table-> timestemps ();

    $ table-> index (['imagelable_id', 'imagelable_type']);
});

Modelle

 // image.php
Klassenbild erweitert das Modell
{
    ?ffentliche Funktionen imagelbar ()
    {
        return $ this-> morphto ();
    }
}

// user.php
Klassenbenutzer erweitert das Modell
{
    ?ffentliche Funktion Image ()
    {
        $ this-> morphone zurückgeben (Image :: class, 'imagelable');
    }
}

// post.php
Klassenbeitrag erweitert das Modell
{
    ?ffentliche Funktion Image ()
    {
        $ this-> morphone zurückgeben (Image :: class, 'imagelable');
    }
}

Verwendung

 $ user = user :: find (1);
$ user-> image ()-> create (['url' => 'avatar.jpg']);

6. polymorphe Beziehungen abfragen

Sie k?nnen basierend auf dem Morph -Typ abfragen.

Holen Sie sich alle Kommentare zu Beitr?gen

 $ comments = comment :: won has ('kommentable', function ($ query) {
    $ query-> wo ('commentable_type', post :: class);
})-> get ();

Oder direkt auf den Typ filtern:

 $ comments = comment :: where ('commentable_type', 'app \ models \ post')
    -> Wo ('commentable_id', 1)
    -> get ();

Eifriger Belastung

Beim Abrufen von Kommentaren k?nnen Sie die Eigentümer bestreiten:

 $ comments = comment :: mit ('kommentierbar')-> get ();

foreach ($ comments as $ comment) {
    echo $ commentar-> Kommentar-> Titel? $ comment-> Kommentar-> Name;
}

Dies vermeidet N 1 Abfragen.


7. Benutzerdefinierte Morph -Karte (optional, aber empfohlen)

Standardm??ig verwendet Laravel den voll qualifizierten Klassennamen in der Spalte *_type , die lang und spr?de sein kann.

Sie k?nnen eine benutzerdefinierte Morph -Karte im AppServiceProvider@boot definieren:

 Verwenden Sie Illuminate \ Datenbank \ eloquent \ relations \ relation;

?ffentliche Funktion boot ()
{
    Beziehung :: MorphMap ([
        'post' => 'App \ Models \ post',
        'Video' => 'App \ Models \ Video',
        'user' => 'App \ models \ user',
    ]);
}

Anstatt App\Models\Post zu speichern, werden nur in der Spalte commentable_type post .

?? Wenn Sie Morph -Karten verwenden, registrieren Sie sie früh (in einem Dienstleister) und verwenden Sie konsistente Schlüssel.


Zusammenfassung

Polymorphe Beziehungen sind m?chtig, wenn Sie flexible Assoziationen ben?tigen. Schlüsselpunkte:

  • Verwenden Sie morphTo() im polymorphen Modell (z. B. Kommentar).
  • Verwenden Sie morphMany() oder morphOne() in den Modellen, die das polymorphe Modell besitzen k?nnen.
  • IMMER IMMER IMMER DIE {relation}_id und {relation}_type spalten.
  • Erw?gen Sie die Verwendung von Relation::morphMap() um die Typwerte sauber zu halten.
  • Eifrige Lastbeziehungen, um Leistungsprobleme zu vermeiden.

Mit diesem Setup k?nnen Sie wiederverwendbare Funktionen wie Kommentare, Likes, Tags oder Medien erstellen, die nahtlos in mehreren Modellen funktionieren.

Grunds?tzlich ist es eine saubere Art zu sagen: ?Dieses Ding kann zu vielen Arten von Dingen geh?ren.“

Das obige ist der detaillierte Inhalt vonWie man mit polymorphen Beziehungen in Laravel arbeitet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

Stock Market GPT

Stock Market GPT

KI-gestützte Anlageforschung für intelligentere Entscheidungen

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)

Hei?e Themen

Wie man in Laravel eloquent verwendet Wie man in Laravel eloquent verwendet Aug 21, 2025 pm 02:30 PM

Modelle erstellen und Migration: Verwenden Sie PhPartisanMake: ModellPost-M, um Modelle und Migrationsdateien zu generieren, die Tabellenstruktur zu definieren und PhPartisanmigrate auszuführen. 2. Grundlegende CRUD -Operationen: Verwenden Sie Post :: All (), Find (), Create (), Save () und Delete (), um Daten abzufragen, zu erstellen, zu aktualisieren und zu l?schen. 3. Verwenden Sie die eloquente Assoziation: Definieren Sie die Beziehungen zwischen H?rbol und Hasmany im Modell und verwenden Sie die Methode mit (), um die zugeh?rigen Daten vorzuladen, um N 1 -Abfrageprobleme zu vermeiden. V.

Wie man mit polymorphen Beziehungen in Laravel arbeitet Wie man mit polymorphen Beziehungen in Laravel arbeitet Aug 25, 2025 am 10:56 AM

PolymorphicrelationshipSinlaravelallowamodellikeCompomentorimagetobelongTomultiplemodelsSuchaspost, Video, Ouserusingasinglease.2.DedatabaseSchemarequires {relation} _idandandcomputerable_typecolumns, exemplifictifydyTableable_idandcompommentable_typecoloNs, Exemplifictable, exemplifictabledy und entfaltet

So erstellen Sie ein soziales Netzwerk mit Laravel So erstellen Sie ein soziales Netzwerk mit Laravel Sep 01, 2025 am 06:39 AM

Ja, youcancreateasocialNetworkwithlaravelByFollowingthesSteps: 1.SetUplaravelusedComposer, configurethe.envFile, EnableAuthenticationViabreeze/Jetstream/Verst?rkung, AndrunMigrationsforSerManmanagement

So verwenden Sie die Aufgabenplanung von Laravel So verwenden Sie die Aufgabenplanung von Laravel Aug 31, 2025 am 06:07 AM

Mit Laravels TaskScheduling-System k?nnen Sie Timing-Aufgaben über PHP definieren und verwalten, ohne den Server-Crontab manuell zu bearbeiten, nur eine Cron-Aufgabe hinzuzufügen, die dem Server einmal pro Minute ausgeführt wird: *CD/Path-to-Your-Project && PhPartiSeSule: Run >>/Dev/Dev/null2> & 1 und dann werden alle Tasks konfiguriert. 1. Definieren von Aufgaben k?nnen Befehls-, Anruf- oder Exec-Methoden verwenden, z. B. $ plan-

So erstellen Sie ein Backend für mobile Apps mit Laravel So erstellen Sie ein Backend für mobile Apps mit Laravel Sep 02, 2025 am 08:34 AM

Um Laravel zum Erstellen eines mobilen Backends zu erstellen, muss zun?chst das Framework installiert und die Datenbankumgebung konfiguriert werden. 2. Definieren Sie API -Routen in Routen/api.php und geben Sie eine JSON -Antwort mit dem Ressourcencontroller zurück. 3.. Implementieren Sie die API -Authentifizierung über Laravelsanctum, um Token für die mobile Speicherung und Authentifizierung zu generieren; 4. überprüfen Sie den Dateityp beim Hochladen von Dateien und speichern Sie sie auf ?ffentlicher Festplatte und erstellen Sie Soft -Links für den externen Zugriff. 5. Die Produktionsumgebung erfordert HTTPS, setzen aktuelle Grenzwerte ein, konfigurieren CORs, führen Sie die API -Versionskontrolle durch und optimieren Sie die Fehlerbehandlung. Es wird au?erdem empfohlen, API -Ressourcen, Paging-, Warteschlangen- und API -Dokumenten -Tools zu verwenden, um die Wartbarkeit und Leistung zu verbessern. Verwenden Sie Laravel, um einen Safe zu bauen,

Wie man eine Laravel -Anwendung internationalisiert Wie man eine Laravel -Anwendung internationalisiert Aug 22, 2025 pm 02:31 PM

Sprachdateien erstellen: Erstellen Sie Subdirektorien für jede Sprache (z. B. en, es) im Ressourcen-/Lang -Verzeichnis und fügen Sie Message.php -Datei hinzu, oder verwenden Sie die JSON -Datei, um die übersetzung zu speichern. 2. Setzen Sie die Anwendungssprache: Lesen Sie den Anforderungsheader Akzeptieren Sie die Sprache über Middleware oder erkennen Sie die Sprache über das URL-Pr?fix, setzen Sie die aktuelle Sprache mit app ()-> setlocale () und registrieren Sie die Middleware in kernel.php. 3.. Verwenden Sie übersetzungsfunktionen: Verwenden Sie __ (), trans () oder @lang in der Ansicht und verwenden Sie __ (), das Fallback unterstützt; 4. Supportparameter und Plural: Verwenden Sie Platzhalter in übersetzungszeichenfolgen wie: n

Wie k?mpfe ich Nachrichten in einer Datei in Laravel an? Wie k?mpfe ich Nachrichten in einer Datei in Laravel an? Sep 21, 2025 am 06:04 AM

LaravelusesmonologtologMessagesViathelogfacade, withefaultLogStoredInstorage/logs/laravel.log.configurechannelsinconfig/logging.phptocontroloutput; thedefaultStackchannelaggatesMulthandleSlerslikesingle: WARNSLIKSLE:

So implementieren Sie eine 'Erinnerung mir' -Funktionalit?t in Laravel So implementieren Sie eine 'Erinnerung mir' -Funktionalit?t in Laravel Aug 31, 2025 am 08:53 AM

Stellen Sie sicher, dass es in der Benutzertabelle eine Spalte für remm_token gibt. Laravels Standardmigration enth?lt bereits dieses Feld. Wenn nicht, wird es durch Migration hinzugefügt; 2. Fügen Sie ein Kontrollk?stchen mit Namen hinzu, erinnern Sie sich im Anmeldeformular, um die Option "Erinnere mich" anzugeben. 3. übergeben Sie den Parameter Remember an die Auth :: Versuch () w?hrend der manuellen Authentifizierung, um eine anhaltende Anmeldung zu erm?glichen. 4. "Remember Me" dauert standardm??ig 5 Jahre und kann über das Remal_FOR -Konfigurationselement in config/auth.php angepasst werden. 5. Laravel ungültig für Erinnerung, wenn sich das Kennwort ?ndert oder Benutzer l?scht. Es wird empfohlen, HTTPS zu verwenden, um die Sicherheit in der Produktionsumgebung zu gew?hrleisten. 6

See all articles