@keksum666

Как сделать Cast для сводной полиморфной таблицы?

Всем привет! Имеет 2 сущности Form и Event связаны между собой полиморфной связью многие ко многим, в сводной таблице есть pivot с названием values, оно хранится в виде json поля. Можно ли как-то использовать каст для этого поля?
Код модели Event:
class Event extends Model
{
    use HasFactory;
    use HasJsonRelationships;

    protected $fillable = [
        'title'
    ];

    protected $casts = [
        'pivot.values' => 'array',
    ];

    public function forms()
    {
        return $this->morphToMany(Form::class, 'entity', 'entities_forms')
            ->withPivot('values')
            ->using(ValuesPivot::class);
    }
}


Код модели Forms:
class Form extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'structure',
    ];

    protected $casts = [
        'entity_id' => 'array',
        'structure' => 'array',
        'pivot.values' => 'array',
    ];

    

    public function events()
    {
        return $this->morphedByMany(Event::class, 'entity', 'entities_forms')->withPivot('values')->using(ValuesPivot::class);
    }
}


Код ValuesPivot:

class ValuesPivot extends MorphPivot
{
    protected $casts = [
        'values' => 'array'
    ];
}


Результат с withPivot('values'):
616a81b06ca0a860684600.png

Результат без withPivot('values'):
616a81ec87bbb156211332.png

Данная проблема решилась добавлением следующей строки в класс ValuePivot:
protected $fillable = [
        'value'
    ];
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы