Rumah  >  Soal Jawab  >  teks badan

Saya menghadapi masalah menggunakan perhubungan polimorfik dalam Laravel 9.x

Saya mempunyai 5 jadual bernama "Pengguna", "Sembang", "Buletin", "Hartas" dan "Pemilik". Semua jadual ini mempunyai hubungan banyak-ke-banyak dengan jadual lain yang dipanggil Medias melalui jadual pangsi yang dipanggil Mediables.

Saya perlu menggunakan hubungan polimorfik kerana semua 5 jadual akan menggunakan jadual Mediables yang sama untuk menyimpan hubungannya dengan jadual Medias.

Untuk topik ini, izinkan saya berkongsi perhubungan polimorfik Pengumuman, Media dan Media yang ditakrifkan dalam fail model masing-masing. Saya juga akan berkongsi fail migrasi untuk pengawal tablemy Mediables

Pengumuman Model:

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

Model Media:

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

Model Perubatan:

class Medialink extends Model
{
  // no relation defined
}

Migrasi Boleh Dirawat:

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

Dalam fail pengawal:

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

Dalam show-bbs.blade.php saya berjaya mengulangi semua ini ($buletin untuk $buletin) dalam gelung foreach:

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

Masalahnya, saya gagal menjawab ini:

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

Tolong bantu saya.

P粉366946380P粉366946380428 hari yang lalu480

membalas semua(1)saya akan balas

  • P粉026665919

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

    Soalan ini sudah ada jawapannya. Masalahnya ialah bagaimana saya menyimpan mediaable_type dalam jadual mediables. Begini cara saya menyimpannya untuk berfungsi:

    Fail pengawal:

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

    Saya terpaksa menyimpan model pengumuman yang tepat untuk berfungsi dengan baik.

    balas
    0
  • Batalbalas