2

私のプロジェクトには、多対多のポリモーフィックな関係があります (Package (morphedByMany) と呼ばれるモデルの多くのインスタンスには、多くの異なるコンテンツ タイプ (各 MorphedToMany) を含めることができます)。

アクセスしてクエリを実行する必要があるいくつかの追加フィールドを含むピボット テーブルを作成したので、MorphPivot を拡張してピボット モデルを作成するのが最善であると判断しました。

クエリは簡単になりましたが、リレーションを介してコンテンツにアクセスすることはできません (App\Packages::findOrFail(1)->contentType() をクエリするとアクセスできます)。ピボットが contentType に属することを宣言する必要があることはわかっていますが、モーフィングされた contentType のいずれかに属している可能性があるため、どうすればよいかわかりません。

要求に応じてコードブロックを編集

コンテンツ1

class Song extends Model
{

  public function packages()
  {
      return $this->morphToMany('App\Package', 'packageable')->withPivot('choice')->using('App\PackageContent');
  }

コンテンツ2

class Video extends Model
{

  public function packages()
  {
      return $this->morphToMany('App\Package', 'packageable')->withPivot('choice')->using('App\PackageContent');
  }

パッケージ

class Package extends Model
{
  public function songs()
  {
      return $this->morphedByMany('App\Song', 'packageable')->withPivot('choice')->using('App\PackageContent');
  }

  public function videos()
  {
      return $this->morphedByMany('App\Video', 'packageable')->withPivot('choice')->using('App\PackageContent');
  }

モーフピボット

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\MorphPivot;

class PackageContent extends MorphPivot
{
  protected $table = 'packageables';

ピボット テーブルの移行

    public function up()
    {
      Schema::create('packageables', function (Blueprint $table) {
        $table->integer('package_id');
        $table->integer('packageable_id');
        $table->string('packageable_type');
        $table->integer('choice');
      });
    }
4

0 に答える 0