我有 5 個(gè)表,分別命名為“Users”、“Chats”、“Buletins”、“Hartas”和“Owners”。所有這些表都通過(guò)名為 Mediables 的數(shù)據(jù)透視表與另一個(gè)名為 Medias 的表建立多對(duì)多關(guān)系。
我需要使用多態(tài)關(guān)系,因?yàn)樗羞@ 5 個(gè)表都將使用相同的 Mediables 表來(lái)存儲(chǔ)它們與 Medias 表的關(guān)系。
對(duì)于這個(gè)主題,讓我分享一下在各自的模型文件中定義的公告、媒體和媒體多態(tài)關(guān)系。我還將分享 Mediables tablemy 控制器的遷移文件
模型公告:
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'); } }
媒體模型:
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'); } }
醫(yī)療模型:
class Medialink extends Model { // no relation defined }
可治療的遷移:
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(); }); }
在控制器文件中:
public function showbuletin ($id) { $buletins = Buletin::where('id', $id)->orWhere('comment_id', $id)->paginate(5); return view('layouts.buletin.show-bbs')->with(compact('buletins')); }
在 show-bbs.blade.php 中,我設(shè)法在 foreach 循環(huán)中回顯所有這些內(nèi)容($buletins 為 $buletin):
{{ $buletin->user->name }} // Buletin belongsTo User & User hasMany Buletin {{ $buletin->messages }} {{ $buletin->created_at }}
問(wèn)題是,我沒(méi)能回應(yīng)這個(gè):
{{ $buletin->medias }} // gives me "[]" on the display
請(qǐng)幫助我。
這個(gè)問(wèn)題已經(jīng)有了答案。問(wèn)題在于我如何將 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, ]); } }
我必須保存準(zhǔn)確的公告模型才能使其正常工作。