Sprache:

Suche

Eine zu vielen polymorphe Beziehung in Laravel

  • Teilen:
Eine zu vielen polymorphe Beziehung in Laravel

Laravel Eloquent ist die ORM-Implementierung (Object-Relational Mapping), die im Laravel-PHP-Framework enthalten ist. Sie bietet eine einfache und elegante Möglichkeit zur Interaktion mit Datenbanken unter Verwendung einer objektorientierten Syntax.

Lesen Sie auch: Livewire Kommentare

Einführung in Laravel Polymorphe Beziehungen

Eine polymorphe Beziehung in Laravel ermöglicht es, dass ein Kindmodell zu mehr als einem Modelltyp gehören kann, indem eine einzige Assoziation verwendet wird, d.h. ein einzelnes Modell kann mit mehreren Modellen über eine einzige Beziehung verbunden sein.

Lesen Sie auch: Sichern Sie Ihre Laravel-Anwendung vor der Übergabe an die Produktion

Hier ist ein Beispiel für eine polymorphe One-to-Many-Beziehung in Laravel, die auch in unseren Projekten am häufigsten verwendet wird.

// Define the Image model
class Image extends Model
{
    public function imageable()
    {
        return $this->morphTo();
    }
}
// Define the Product model
class Product extends Model
{
    public function images()
    {
        return $this->morphMany(Image::class, 'imageable');
    }
}
// Define the User model
class User extends Model
{
    public function images()
    {
        return $this->morphMany(Image::class, 'imageable');
    }
}

In diesem Beispiel kann sich das Bildmodell entweder auf eine Product oder eine User Modell. Dies wird erreicht durch die Definition eines morphTo Beziehung in der Image Modell und ein morphMany Beziehung sowohl in der Product und User Modelle. Diese Art von Beziehung kann nützlich sein, wenn Sie ein Modell haben, das mit mehreren anderen Modellen verknüpft werden muss, Sie aber nicht für jedes Modell separate Beziehungen erstellen möchten.

Lesen Sie auch: Laravel-Einsätze mit Envoy

Um nun die Bilder aus den folgenden Quellen abzurufen User Modell und Product Modell

//user model and get images
$user = App\Models\User::find(1);
 
foreach ($user->images as $image) {
    //do something with the image now.
}
//product model and get images
$product = App\Models\Product::find(1);
 
foreach ($product->images as $image) {
    //do something with the image now.
}
TWT Staff

TWT Staff

Writes about Programming, tech news, discuss programming topics for web developers (and Web designers), and talks about SEO tools and techniques