Ich habe Probleme bei der Verwendung polymorpher Beziehungen in Laravel 9.x
P粉366946380
P粉366946380 2023-09-10 13:33:41
0
1
478

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粉366946380
P粉366946380

Antworte allen(1)
P粉026665919

这个问题已经有了答案。问题在于我如何将 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,
    ]);
  }
}

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!