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

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!