2

在我的项目中,存在多对多的多态关系(称为 Package (morphedByMany) 的模型的许多实例可以包含许多不同的内容类型(每个 MorphedToMany)。

我创建了一个数据透视表,其中包含一些我需要访问和查询的附加字段,因此我决定最好的办法是通过扩展 MorphPivot 创建一个 Pivot 模型。

查询现在很容易,但是,我无法通过关系访问内容(如果我查询 App\Packages::findOrFail(1)->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