J'ai du mal à utiliser les relations polymorphes dans Laravel 9.x
P粉366946380
P粉366946380 2023-09-10 13:33:41
0
1
407

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.

P粉366946380
P粉366946380

répondre à tous (1)
P粉026665919

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 :

// store new buletin_media in mediables table if ($request->media_id) { foreach ($request->media_id as $key => $value) { Mediable::create([ 'media_id' => $value, 'mediable_id' => $buletin->id, 'mediable_type' => Buletin::class, ]); } }

J'ai dû sauvegarder le modèle d'annonce exact pour que cela fonctionne correctement.

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!