Saya menghadapi masalah menggunakan perhubungan polimorfik dalam Laravel 9.x
P粉366946380
P粉366946380 2023-09-10 13:33:41
0
1
492

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

membalas semua(1)
P粉026665919

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan