Filament PHP: память исчерпана при выборе всех записей таблицы (более 500 тысяч строк). Как ограничить или оптимизироватPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Filament PHP: память исчерпана при выборе всех записей таблицы (более 500 тысяч строк). Как ограничить или оптимизироват

Сообщение Anonymous »

Я использую Filament PHP v3 с Laravel, и у меня есть таблица, которая может содержать более 500 000 пользовательских записей. Когда пользователи нажимают кнопку «Выбрать все», приложение вылетает с ошибкой нехватки памяти:

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

Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

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

use Filament\Tables\Concerns\InteractsWithTable;

class SendMail extends Page implements HasTable
{
use InteractsWithTable;

public function table(Table $table): Table
{
return $table
->query(User::query()->where('is_admin', 0))
->columns([
TextColumn::make('full_name'),
TextColumn::make('email'),
])
->bulkActions([
BulkAction::make('send_mail')
->form([
Wizard::make([
Wizard\Step::make('メール入力画面')
->schema(fn($livewire) => [
ViewField::make('user-table')
->label('')
->dehydrated(false)
->view('filament.commons.selected-user-table-wrapper'),
TextInput::make('subject')
->label('件名')
->markAsRequired()
->rules(['required'])
->validationMessages([
'required' => Config::get('messages.ERROR.MES_001'),
])
->columnSpan('full')
->extraInputAttributes(['maxlength' => "255"]),
Textarea::make('content')
->label('内容')
->rows(5)
->markAsRequired()
->rules(['required'])
->validationMessages([
'required' => Config::get('messages.ERROR.MES_001'),
])
->columnSpan('full')
->extraInputAttributes(['maxlength' => "512"]),
]),
Wizard\Step::make('メール確認画面')
->schema([
Placeholder::make('mail_subject')
->label('件名')
->content(fn(Get $get) => $get('subject')),
Placeholder::make('mail_content')
->label('内容')
->content(fn(Get $get) => new HtmlString(nl2br(e($get('content'))))),
]),
])
->previousAction(fn($action) => $action->label('戻る'))
->submitAction(new HtmlString(Blade::render(modalCancelAction(false)
->modalWidth(MaxWidth::FiveExtraLarge)
->action(fn($data, $records) => $this->sendMail($data, $records)),
])
}
}
Проблема в том, что при нажатии кнопки «Выбрать все» $records содержит все 500 тысяч пользовательских моделей, загруженных в память.
Как я могу:
Ограничить «Выбрать все» максимальным количеством записей 150 000 и показать предупреждающее уведомление в случае превышения
Спасибо всем

Подробнее здесь: https://stackoverflow.com/questions/798 ... 00k-rows-h
Ответить

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

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

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

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

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