Вложенные отношения в форме нитиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Вложенные отношения в форме нити

Сообщение Anonymous »

У меня есть модель Chapter с отношением content() MorphTo.
Отношение content() может быть связаны с различными моделями: LiveTraffic, SimulatedFlight или Video.
LiveTraffic и SimulatedFlight по существу модели Пито и, соответственно, имеют отношение track() HasMany и отношение Prompts() HasMany.
Для простоты я возьму только случай LiveTraffic content_type.
В ChaptersRelationManager у меня есть следующее:

Код: Выделить всё

public function form(Form $form): Form
{
return $form
->schema([
...
Select::make('content_type')
->options(Chapter::getContentTypesAsOptions())
->required()
->in(Chapter::getContentTypesAliases()),
Group::make()
->relationship('content')
->schema(fn (Get $get): array => match ($get('content_type')) {
(new LiveTraffic)->getMorphClass() => $this->liveTrafficSchema(),
(new SimulatedFlight)->getMorphClass() => $this->simulatedFlightSchema(),
(new Video)->getMorphClass() => $this->videoSchema(),
default => [],
}),
]);
}

protected function liveTrafficSchema(): array|Closure
{
return [
Repeater::make('tracks')
->relationship('tracks')
->defaultItems(1)
->schema([
MarkdownEditor::make('transcript')
->required(),
]),
];
}
При попытке выбрать LiveTraffic в качестве content_type я получаю следующую ошибку:

Код: Выделить всё

BadMethodCallException
Call to undefined method App\Models\Chapter::tracks()
Для тестирования я изменил метод liveTrafficSchema, чтобы он не использовал повторитель, а использовал готовый текстовый ввод test, например:

Код: Выделить всё

protected function liveTrafficSchema(): array|Closure
{
return [
TextInput::make('test'),
];
}
Теперь при попытке выбрать LiveTraffic в качестве content_type текстовый ввод test отображается без каких-либо ошибок. При отправке формы я получаю следующую ошибку, которая, похоже, подтверждает, что связь content() теперь учитывается:

Код: Выделить всё

MassAssignmentException
Add [test] to fillable property to allow mass assignment on [App\Models\LiveTraffic].
Поэтому меня смущает, почему отношение content() игнорируется при вложении в него повторителя. Любая помощь будет очень признательна!


Подробнее здесь: https://stackoverflow.com/questions/792 ... ament-form
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»