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.
Soalan ini sudah ada jawapannya. Masalahnya ialah bagaimana saya menyimpan mediaable_type dalam jadual mediables. Begini cara saya menyimpannya untuk berfungsi:
Fail pengawal:
Saya terpaksa menyimpan model pengumuman yang tepat untuk berfungsi dengan baik.