Eloquent: relaciones polimórficas

Que una misma tabla pueda establecer relaciones una a muchas (o muchas a muchas) con tablas diferentes.

Por ejemplo guardar comentarios tanto de películas como de cineastas.

Crear un modelo Comentario:
public function comentario() {
return $this->morphTo();
}

En el modelo Pelicula:
public function comentarios() {
return $this->morphMany("App\Comentario", "comentario");
}

En el modelo Cineasta:
public function comentarios() {
return $this->morphMany("App\Comentario", "comentario");
}

La tabla comentario debe tener este formato:
id
comentario
comentario_id // guardar el id de la tabla
comentario_type // guardar el tipo de modelo que es:  App\Cineasta ó App\Pelicula

Y ya en routes/web.php:
Route::get("/comentarios", function() {
    $cineasta = Cineasta::find(1);
    foreach ($cineasta->comentarios as $item) {
        echo $item->comentario."<br>";
    }
    echo "<hr>";
    $pelicula = Pelicula::find(1);
    foreach ($pelicula->comentarios as $item) {
        echo $item->comentario."<br>";
    }
});

No hay comentarios:

Publicar un comentario