Это точный вариант использования для полиморфных отношений , они снабжают вашу модель, как вы хотели, столбцом, указывающим тип отношения и идентификатор связанной модели.
См. Также этот пример из документации laravel:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Image extends Model {
/**
* Get all of the owning imageable models.
*/
public function imageable() {
return $this->morphTo();
}
}
class Post extends Model {
/**
* Get the post's image.
*/
public function image(){
return $this->morphOne('App\Image', 'imageable');
}
}
class User extends Model {
/**
* Get the user's image.
*/
public function image()
{
return $this->morphOne('App\Image', 'imageable');
}
}
Здесь у каждого пользователя и записи может быть изображение, а у каждого изображения есть изображение, которое может быть пользователем или публикацией.