Поля

RelationRepeater

Основы

Содержит все Базовые методы.

Поле RelationRepeater предназначено для работы с отношениями HasMany и HasOne. Оно позволяет создавать, редактировать и удалять связанные записи прямо из формы основной модели.

Поле автоматически синхронизирует связанные записи при сохранении основной модели.

make(
string|Closure $label,
?string $relationName = null,
string|Closure|null $formatted = null,
ModelResource|string|null $resource = null,
)
  • $label - заголовок поля,
  • $relationName - имя отношения,
  • $formatted - замыкание для форматирования значения поля в режиме "preview",
  • $resource - ресурс связанной модели.
 namespaces
use MoonShine\Laravel\Fields\Relationships\RelationRepeater;
 
RelationRepeater::make(
'Comments',
'comments',
resource: CommentResource::class
)

Набор полей

По умолчанию поле использует все поля формы из указанного ресурса. Однако вы можете переопределить набор полей с помощью метода fields().

 namespaces
use MoonShine\Laravel\Fields\Relationships\RelationRepeater;
use MoonShine\UI\Fields\ID;
use MoonShine\UI\Fields\Text;
 
RelationRepeater::make('Characteristics', 'characteristics')
->fields([
ID::make(),
Text::make('Name', 'name'),
Text::make('Value', 'value'),
])

Наличие поля ID обязательно, иначе записи будут всегда добавляться.

Вертикальный режим

Метод vertical() изменяет отображение таблицы из горизонтального режима на вертикальный.

vertical(Closure|bool|null $condition = null)
RelationRepeater::make('Comments', 'comments')
->vertical()

Добавление/Удаление

По умолчанию поле позволяет добавлять новые элементы. Это поведение можно изменить с помощью метода creatable().

creatable(
Closure|bool|null $condition = null,
?int $limit = null,
?ActionButtonContract $button = null
)
  • $condition - условие, при котором метод должен быть применён,
  • $limit - ограничение на количество возможных элементов,
  • $button - возможность заменить кнопку добавления на свою.

Для возможности удаления элементов используется метод removable().

removable(
Closure|bool|null $condition = null,
array $attributes = []
)
RelationRepeater::make('Comments', 'comments')
->creatable(limit: 5)
->removable()

Кнопки

Метод buttons() позволяет переопределить кнопки, используемые в поле.

 namespaces
use MoonShine\Laravel\Fields\Relationships\RelationRepeater;
use MoonShine\UI\Components\ActionButton;
 
RelationRepeater::make('Comments', 'comments')
->buttons([
ActionButton::make('', '#')
->icon('trash')
->onClick(fn() => 'remove()', 'prevent')
->class('btn-error')
->showInLine()
])

Модификаторы

Модификатор таблицы

Метод modifyTable() позволяет модифицировать таблицу (TableBuilder).

 namespaces
use MoonShine\Laravel\Fields\Relationships\RelationRepeater;
use MoonShine\UI\Components\Table\TableBuilder;
 
RelationRepeater::make('Comments', 'comments')
->modifyTable(
fn(TableBuilder $table, bool $preview) => $table
->customAttributes([
'class' => 'custom-table'
])
)

Модификатор кнопки удаления

Метод modifyRemoveButton() позволяет изменить кнопку удаления.

 namespaces
use MoonShine\Laravel\Fields\Relationships\RelationRepeater;
use MoonShine\UI\Components\ActionButton;
 
RelationRepeater::make('Comments', 'comments')
->modifyRemoveButton(
fn(ActionButton $button) => $button
->customAttributes([
'class' => 'btn-secondary'
])
)