Heim  >  Fragen und Antworten  >  Hauptteil

Ich habe Probleme bei der Verwendung polymorpher Beziehungen in Laravel 9.x

Ich habe 5 Tabellen mit den Namen „Benutzer“, „Chats“, „Buletins“, „Hartas“ und „Eigentümer“. Alle diese Tabellen haben über eine Pivot-Tabelle namens Mediables eine Viele-zu-Viele-Beziehung zu einer anderen Tabelle namens Medias.

Ich muss eine polymorphe Beziehung verwenden, da alle fünf Tabellen dieselbe Mediables-Tabelle verwenden, um ihre Beziehung zur Medias-Tabelle zu speichern.

Lassen Sie mich für dieses Thema die polymorphen Beziehungen zwischen Ankündigung, Medien und Medien vorstellen, die in ihren jeweiligen Modelldateien definiert sind. Ich werde auch die Migrationsdateien für den Mediables-Tablemy-Controller teilen

Model-Ankündigung:

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');
  }
}

Medienmodell:

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');
  }
}

Medizinisches Modell:

class Medialink extends Model
{
  // no relation defined
}

Behandelbare Migration:

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();
  });
}

In der Controller-Datei:

public function showbuletin ($id)
{
  $buletins = Buletin::where('id', $id)->orWhere('comment_id', $id)->paginate(5);
  return view('layouts.buletin.show-bbs')->with(compact('buletins'));
}

In show-bbs.blade.php ist es mir gelungen, das alles ($buletins für $buletin) in einer foreach-Schleife wiederzugeben:

{{ $buletin->user->name }} // Buletin belongsTo User & User hasMany Buletin
{{ $buletin->messages }}
{{ $buletin->created_at }}

Das Problem ist, dass ich darauf nicht geantwortet habe:

{{ $buletin->medias }} // gives me "[]" on the display

Bitte hilf mir.

P粉366946380P粉366946380378 Tage vor443

Antworte allen(1)Ich werde antworten

  • P粉026665919

    P粉0266659192023-09-11 10:48:00

    这个问题已经有了答案。问题在于我如何将 mediaable_type 保存在 mediables 表中。以下是我保存它以使其正常工作的方法:

    控制器文件:

    // 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,
        ]);
      }
    }

    我必须保存准确的公告模型才能使其正常工作。

    Antwort
    0
  • StornierenAntwort