В моем проекте существует полиморфное отношение «многие ко многим» (многие экземпляры модели Package (morphedByMany) могут содержать много разных типов контента (каждый MorphedToMany).
Я создал сводную таблицу, содержащую некоторые дополнительные поля, к которым мне нужно будет получить доступ и запросить по ним, и поэтому я решил, что лучше всего будет создать модель Pivot путем расширения MorphPivot.
Запросы теперь достаточно просты, однако я не могу получить доступ к контенту через отношение (что я могу сделать, если я сделаю запрос в App \ Packages :: findOrFail (1) -> contentType ()). Я знаю, что должен объявить, что сводная таблица принадлежит типу contentType, но я не уверен, как это сделать, поскольку он может принадлежать любому из измененных типов контента.
EDIT
Кодовые блоки по запросу
Content1
class Song extends Model
{
public function packages()
{
return $this->morphToMany('App\Package', 'packageable')->withPivot('choice')->using('App\PackageContent');
}
Content2
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');
}
MorphPivot
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');
});
}