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.
}