我在 Laravel 9.x 中使用多態關係時遇到問題
P粉366946380
P粉366946380 2023-09-10 13:33:41
0
1
509

我有 5 個表,分別命名為「Users」、「Chats」、「Buletins」、「Hartas」和「Owners」。所有這些表都透過名為 Mediables 的資料透視表與另一個名為 Medias 的表建立多對多關係。

我需要使用多態關係,因為所有這 5 個表都將使用相同的 Mediables 表來儲存它們與 Medias 表的關係。

對於這個主題,讓我分享一下在各自的模型檔案中定義的公告、媒體和媒體多態關係。我也會分享 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');
  }
}

醫療模型:

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 中,我設法在 foreach 循環中回顯所有這些內容($buletins 為 $buletin):

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

問題是,我沒能回應這個:

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

請幫我。

P粉366946380
P粉366946380

全部回覆(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,
    ]);
  }
}

我必須保存準確的公告模型才能使其正常工作。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板