J'ai 5 tables nommées "Utilisateurs", "Chats", "Buletins", "Hartas" et "Propriétaires". Toutes ces tables ont une relation plusieurs-à-plusieurs avec une autre table appelée Medias via un tableau croisé dynamique appelé Mediables.
Je dois utiliser une relation polymorphe car les 5 tables utiliseront la même table Mediables pour stocker leur relation avec la table Medias.
Pour ce sujet, permettez-moi de partager les relations polymorphes Annonce, Média et Média définies dans leurs fichiers modèles respectifs. Je partagerai également les fichiers de migration du contrôleur tablemy Médiables
Annonce du modèle :
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphToMany; class Buletin extends Model { public function user() { return $this->belongsTo(User::class); } public function medias(): MorphToMany { return $this->morphToMany(Media::class, 'mediable'); } }
Modèle média :
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphToMany; class Media extends Model { public function buletins(): MorphToMany { return $this->morphedByMany(Buletin::class, 'mediable'); } }
Modèle médical :
class Medialink extends Model { // no relation defined }
Migration traitable :
public function up() { Schema::create('mediables', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('media_id'); $table->foreign('media_id')->references('id')->on('medias')->onDelete('cascade'); $table->unsignedBigInteger('mediable_id'); $table->string('mediable_type'); $table->timestamps(); }); }
Dans le fichier du contrôleur :
public function showbuletin ($id) { $buletins = Buletin::where('id', $id)->orWhere('comment_id', $id)->paginate(5); return view('layouts.buletin.show-bbs')->with(compact('buletins')); }
Dans show-bbs.blade.php, j'ai réussi à faire écho à tout cela ($buletins pour $buletin) dans une boucle foreach :
{{ $buletin->user->name }} // Buletin belongsTo User & User hasMany Buletin {{ $buletin->messages }} {{ $buletin->created_at }}
Le problème est que je n'ai pas répondu à ceci :
{{ $buletin->medias }} // gives me "[]" on the display
S'il vous plaît, aidez-moi.
Cette question a déjà une réponse. Le problème est de savoir comment enregistrer le mediaable_type dans la table mediaables. Voici comment je l'ai enregistré pour fonctionner :
Fichier du contrôleur :
J'ai dû sauvegarder le modèle d'annonce exact pour que cela fonctionne correctement.