¿Uno para todos o Pivot individual para muchos a muchos en Laravel?

¿Uno para todos o Pivot individual para muchos a muchos en Laravel?

No sé si lo estoy haciendo bien o mal... quiero hacer un blog que tenga varias categorías y etiquetas con una relación de muchos a muchos.

¿Debería hacer una tabla dinámica para cada uno como:

       "category_post"
        $table->integer('post_id')->unsigned()->index();
        $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
        $table->integer('category_id')->unsigned()->index();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');

y otro para la tabla Etiquetas... ¿O puedo hacer una tabla para ambos con una columna adicional que pueda filtrar eso?

       "pivot_post"
        $table->integer('post_id')->unsigned()->index();
        $table->integer('pivot_id')->unsigned()->index();
        $table->string('type');

pero... si puedo hacer uno para todos, no sé cómo hacer la base de datos y la relación. y cuál es mejor para el rendimiento ..? ¿1 tabla de relación grande o tabla de relación múltiple? gracias.

Mostrar la mejor respuesta

Creo que estás buscando una relación polimórfica si quieres lograr esto con una sola tabla. https://laravel.com/docs/5.6/relaciones-elocuentes#relaciones-polimorficas relaciones

incluso si hizo que funcionara a través de una relación polimórfica, le recomiendo crear una tabla dinámica separada con una relación de muchos a muchos. Como las relaciones polimórficas tienen errores conocidos en las consultas whereHas.

Descubrí que lo que necesito son relaciones polimórficas de muchos a muchos, pero gracias por el consejo de no usar... ;-). Iré con el pivote separado para cada uno...