Для этого есть обычная реализация мета полей.
Это таблица полей (пример)
Schema::create('metas', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('key')->index();
$table->text('value')->nullable();
$table->uuid('post_id');
$table->text('post_type');
$table->timestamps();
});
В модели выставляются полиморфные отношения:
public function meta() {
return $this->morphMany('App\Meta', 'post');
}
Полиморфные сделаны для того чтобы поля можно было использовать для любых моделей.