// In app/Models/Image.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Image extends Model { public function imageable() { return $this->morphTo(); } } // In app/Models/Post.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model { public function images() { return $this->morphMany(Image::class, 'imageable'); } } // In app/Models/User.php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { public function images() { return $this->morphMany(Image::class, 'imageable'); } } // Database Migration (e.g., create_images_table) /* Schema::create('images', function (Blueprint $table) { $table->id(); $table->string('url'); $table->morphs('imageable'); // Adds imageable_id (INT) and imageable_type (VARCHAR) $table->timestamps(); }); */ // Usage: $user = App\Models\User::find(1); $user->images()->create(['url' => 'profile.jpg']); $post = App\Models\Post::find(1); $post->images()->create(['url' => 'post_header.png']); $image = App\Models\Image::find(1); echo $image->imageable->name; // If imageable is a User echo $image->imageable->title; // If imageable is a Post