Heim >PHP-Framework >Laravel >So vermeiden Sie die Suche nach jeder Tabelle in Laravel

So vermeiden Sie die Suche nach jeder Tabelle in Laravel

PHPz
PHPzOriginal
2023-04-21 10:01:59700Durchsuche

Durch die Verwendung von Relationship Mapping in Laravel kann das Problem der Verwendung von foreach zum Nachschlagen von Tabellen vermieden werden. Die relationale Zuordnung ist eine der leistungsstarken ORM-Funktionen (Object-Relational Mapping) von Laravel, mit der automatisch Beziehungen zwischen Tabellen im Modell hergestellt werden können.

In Laravel gibt es drei Beziehungszuordnungen: Eins-zu-eins, Eins-zu-viele und Viele-zu-viele. Diese Beziehungszuordnungen können durch Eloquent-Modelle definiert und etabliert werden. Im Folgenden werden wir die Verwendung und Implementierung dieser drei Beziehungszuordnungen anhand der Praxis im Detail vorstellen.

Eins-zu-eins-Beziehungszuordnung

Eins-zu-eins-Beziehungszuordnung wird häufig verwendet, wenn zwei Tabellen denselben Primärschlüssel verwenden und eine Datenzeile in einer Tabelle nur einer Datenzeile in der anderen Tabelle entsprechen kann . Zum Beispiel die Tabelle „Bestellungen“ und die Tabelle „Kunden“. Jede Bestellung gehört nur einem Kunden und jeder Kunde hat nur eine Bestellung. In diesem Fall ist die Kunden-ID-Spalte der Auftragstabelle die Primärschlüsselspalte in der Kundentabelle.

In Eloquent können wir zwei Modelle definieren: das Bestellmodell und das Kundenmodell, und eine Eins-zu-eins-Beziehungszuordnung zwischen den beiden Modellen herstellen:

// 订单模型
class Order extends Model
{
    public function customer()
    {
        return $this->hasOne(Customer::class);
    }
}

// 客户模型
class Customer extends Model
{
    public function order()
    {
        return $this->belongsTo(Order::class);
    }
}

Im obigen Code befinden wir uns im Bestell- und Kundenmodell bzw. In ist eine Beziehungsmethode definiert, nämlich Kunde und Bestellung. Beide Beziehungsmethoden verwenden die Methoden „hasOne“ und „gehörtTo“ im Eloquent-Modell, um eine Eins-zu-eins-Beziehungszuordnung zwischen den beiden Modellen herzustellen.

Wenn wir Kundeninformationen für eine Bestellung finden müssen, müssen wir nur die Methode $order->customer verwenden:

$order = Order::find($id);
$customer = $order->customer;

Eins-zu-viele-Beziehungszuordnung

Eins-zu-viele-Beziehungszuordnung wird häufig in verwendet Eine Tabelle Eine Datenzeile kann Datenzeilen in mehreren Tabellen entsprechen. Ein Benutzer hat beispielsweise mehrere Artikel oder eine Abteilung hat mehrere Mitarbeiter. In diesem Fall müssen wir die Methoden „hasMany“ und „gehörtTo“ im relevanten Eloquent-Modell verwenden, um eine Eins-zu-viele-Beziehungszuordnung zu erstellen.

Am Beispiel der Benutzertabelle und der Artikeltabelle müssen wir eine Eins-zu-Viele-Beziehungszuordnung im Benutzer- und Artikelmodell erstellen:

// 用户模型
class User extends Model
{
    public function articles()
    {
        return $this->hasMany(Article::class);
    }
}

// 文章模型
class Article extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

Im obigen Code definieren wir eine Beziehungsmethode mit dem Namen „Artikel“ im Benutzer Modell: Die Eins-zu-Viele-Beziehungszuordnung zwischen Benutzern und Artikeln wird durch die hasMany-Methode implementiert. Im Artikelmodell ist eine Beziehungsmethode mit dem Namen „Benutzer“ definiert, und die Viele-zu-Eins-Beziehungszuordnung zwischen Artikeln und Benutzern wird über die Methode „gehörtTo“ implementiert.

Wenn wir alle Artikel eines Benutzers finden müssen, müssen wir nur die Methode $user->articles verwenden:

$user = User::find($id);
$articles = $user->articles;

Many-to-many-Beziehungszuordnung

Many-to-many-Beziehungszuordnung wird oft zwischen verwendet zwei Tabellen Viele-zu-viele-Beziehung. In Bezug auf die Beziehung zwischen Benutzern und Rollen kann beispielsweise ein Benutzer mehrere Rollen haben und eine Rolle kann auch mehreren Benutzern gehören. In diesem Fall müssen wir die Methode „gehörtToMany“ im Eloquent-Modell verwenden, um eine Viele-zu-Viele-Beziehungszuordnung zu erstellen.

Am Beispiel der Benutzertabelle und der Rollentabelle müssen wir eine Viele-zu-Viele-Beziehungszuordnung in den Benutzer- und Rollenmodellen erstellen:

// 用户模型
class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

// 角色模型
class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}

Im obigen Code definieren wir eine Beziehungsmethode mit dem Namen „Rollen“ im Benutzer Modell: Die Zuordnung von Viele-zu-Viele-Beziehungen zwischen Benutzern und Rollen wird über die Methode „gehörtToMany“ implementiert. Im Rollenmodell ist eine Beziehungsmethode mit dem Namen „Benutzer“ definiert, und die Zuordnung von Viele-zu-Viele-Beziehungen zwischen Rollen und Benutzern wird über die Methode „gehörtToMany“ implementiert.

Wenn wir alle Rollen eines Benutzers finden müssen, müssen wir nur die Methode $user->roles verwenden:

$user = User::find($id);
$roles = $user->roles;

Zusammenfassung

Durch die Verwendung der relationalen Zuordnungsfunktion in Laravel kann das Problem der Verwendung von foreach to effektiv vermieden werden Schauen Sie in der Tabelle nach. Eins-zu-eins-, Eins-zu-viele- und Viele-zu-viele-Beziehungszuordnungen entsprechen den Beziehungen zwischen verschiedenen Datentabellen und werden durch die Eloquent-Modellmethode definiert und implementiert. Wir können eine Beziehungszuordnung erstellen, indem wir Beziehungsmethoden im relevanten Eloquent-Modell definieren und dabei die Methoden hasMany, gehörtTo und gehörtToMany verwenden. Mit dieser Methode können wir komplexe Datenbankoperationen einfach und bequem implementieren und unseren Code außerdem übersichtlicher und leichter wartbar machen.

Das obige ist der detaillierte Inhalt vonSo vermeiden Sie die Suche nach jeder Tabelle in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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