Таблицы
Страница «Таблицы» — это основная страница раздела, которая отображает список всех записей модели в виде сортируемой и фильтруемой таблицы.
fields()
Обязательный метод, определяющий поля модели. По умолчанию система собирает и таблицы, и формы из этого метода.
public function fields(): array
{
return [
ID::make('ID'),
Text::make('title', 'Название статьи')
->sortable(),
Toggle::make('is_published', 'Опубликовано')
->editable(),
DateTime::make('created_at', 'Дата создания')
->format('d.m.Y H:i')
->sortable(),
];
}
Методы полей для таблицы
BelongsTo, MorphTo). Включает поиск по связанному ресурсу при выборе значения. У Text/Number/etc. этот метод НЕ существует — индексация в глобальном поиске управляется через toSearchableArray() на модели (Laravel Scout).Toggle, Select и Image. Разрешает редактирование значения прямо в ячейке таблицы, без перехода на страницу записи.d.m.Y H:i для даты).Подписи через caption
Типичный приём — основной атрибут сверху, вспомогательный мелким шрифтом под ним:
use Frame\Laravel\Http\Requests\FrameRequest;
public function fieldsForIndex(): array
{
return [
ID::make('id', 'ID'),
Text::make('name', 'Название')
->sortable()
->width(550)
->caption(fn (FrameRequest $request, Tag $tag): ?string => $tag->sys_name),
Toggle::make('is_featured', 'Избранное')
->editable(),
];
}
В таблице над name будет заголовок, ниже серым — sys_name. В fields() оставляйте оба поля отдельно — на форме редактирования оба видны полноценно.
fieldsForIndex()
Необязательный метод. Если определён — на странице списка записей будут использоваться поля из него, а не из fields().
public function fieldsForIndex(): array
{
return [
ID::make('ID'),
Text::make('title', 'Название статьи')
->sortable(),
Toggle::make('is_published', 'Опубликовано')
->editable(),
];
}

Класс-схема таблицы
Колонки списка можно вынести в отдельный класс-схему и подключить через статическое свойство $table — симметрично $form (см. Формы) и $infolist (см. Infolist). Схема наследуется от Frame\Laravel\Schemas\Table и определяет единственный метод fields(), который используется только для страницы списка. Настройки уровня колонки (ширины, подписи, агрегации) задаются на самих полях.
class CommentResource extends Resource
{
public static ?string $table = CommentTable::class;
}
use Frame\Laravel\Http\Requests\FrameRequest;
use Frame\Laravel\Schemas\Table;
class CommentTable extends Table
{
public function fields(FrameRequest $request): array
{
return [
ID::make('id'),
Text::make('description', 'Комментарий')
->sortable(),
];
}
}
Если $table не задан, ресурс использует fieldsForIndex()/fields(). Схема получает сам ресурс в конструкторе (доступен как $this->resource).
frame:resource генерирует только сам ресурс.