Laravel: один ко многим или полиморфная связь для разных типов контента?

У меня есть стол contents который имеет много типов, например posts , albums, videos,

миграция таблицы содержания:

Schema::create('contents', function (Blueprint $table) {
$table->increments('id');
$table->integer('ref_id')->index();
$table->integer('type')->index();
$table->string('title', 255);
$table->text('description');
$table->boolean('published')->default(false);
$table->string('thumb', 255);
$table->timestamps();
});

и посты таблицы миграции:

Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->text('body');
});

та же идея относится ко всем другим типам, таким как видео:

Schema::create('videos', function (Blueprint $table) {
$table->increments('id');
$table->string('youtube_id', 255);
});

Чтобы получить полный контент сейчас, я использую отношение hasMany:

class Content extends Model
{

public function posts() {
return $this->hasMany('App\Post','id' ,'ref_id');
}

public function videos() {
return $this->hasMany('App\Video','id' ,'ref_id');
}
...
}class Post extends Model
{
public function content() {
return $this->belongsTo('App\Content', 'id' , 'ref_id')->where('type','1');
}
}class Video extends Model
{
public function content() {
return $this->belongsTo('App\Content', 'id' , 'ref_id')->where('type','3');
}
}

Как видите, я добавил вручную types где каждый тип имеет номер, например, контент с типом 1 предназначен для публикаций, контент с типом 3 предназначен для видео и т. д.

Я чувствую, что моя структура не так хороша и может быть улучшена. Я столкнулся с Полиморфными Отношениями в документации, и я не знаю, будет ли это хорошо для моего случая или нет.

Любой совет?

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]