Livewire DataTable: `$this->data` очищается во время `обезвоживания`, в результате чего строки таблицы исчезают.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Livewire DataTable: `$this->data` очищается во время `обезвоживания`, в результате чего строки таблицы исчезают.

Сообщение Anonymous »

Я работаю с модульной структурой компонентов Livewire, которая включает в себя базовый компонент (

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

BaseTable.php
)[/b] и дочерние компоненты. BaseTable предназначен для обработки функций многократного использования таблиц и рендеринга представления Blade (

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

table.blade.php
), который динамически отображает данные и столбцы, переданные в качестве свойств.
Структура компонента
  • Код: Выделить всё

    BaseTable.phpКомпонент 
    [/b] включает общие функции, такие как нумерация страниц, сортировка и фильтры, а также предоставляет перехватчики жизненного цикла (, обезвоживание и т. д.).
  • Дочерние компоненты наследуют BaseTable и должны переопределять следующее:
    • Код: Выделить всё

      getQuery()
      : возвращает запрос, соответствующий назначению дочернего компонента.
    • Код: Выделить всё

      $columns
      : определяет отображаемые столбцы таблицы.
Пример дочернего элемента настройка:

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

protected function getQuery()
{
return Model::query()->where(...); // Custom query
}

public $columns = [
['name' => 'id', 'label' => 'ID', 'sortable' => true],
['name' => 'name', 'label' => 'Name', 'sortable' => true],
];
Blade-файл (

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

table.blade.php
)[/b] использует свойства data и columns компонента Livewire для отображения таблицы. Строки интерактивны, и нажатие на одну из них запускает метод в компоненте Livewire.
Проблема
  • Во время первоначального монтирования $this->data корректно заполняется с помощью replaceData() и отображается в таблице.
  • Изменение количества строк на странице или навигация работает нормально, а $this->data обновляется как ожидаемо.
  • Однако, когда я нажимаю на строку, происходит следующее:
    • Строки таблицы исчезнут (больше не отображаются на экране).
    • показывает, что

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

      $this->data
      очищается во время обезвоживания[/b].
Это поведение одинаково во всех взаимодействиях, связанных с щелчками по строкам, но я не изменяю $this->data явно на этапе обезвоживания.
Ключевые сведения о жизненном цикле

[code]refreshData()[/code][/b]

Вызывается для загрузки данных на основе запроса.

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

protected function refreshData()
{
$this->data = $this->getQuery()
->orderBy($this->orderByColumn, $this->orderByDirection)
->skip($this->page * $this->perPage - $this->perPage)
->take($this->perPage)
->get();
}

[code]handleRowClick()[/code][/b]

Вызывается при щелчке по строке.

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

public function handleRowClick($row)
{
logger($this->data); // Logs show $this->data is already empty
$this->expandSubData($row['id']);
$this->clickItem($row);
logger($this->subData);
}

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

@foreach ($data as $index => $row)

{{-- table columns section --}}
Наблюдаемое поведение
  • ведет себя так, как ожидалось: $this->data изначально содержит правильные данные.
  • Во время обезвоживания $this->data очищается без видимой причины.
  • Нажатие на строку приводит к тому, что $this->data становится пустым, а строки таблицы исчезают.

    Что у меня есть Пробовал
  • Проверил, что никакой явный код не изменяет $this->данные во время обезвоживания. code>.
  • Добавлен регистратор в перехватчиках жизненного цикла для отслеживания состояния $this->data.
  • Протестировано с использованием резервной переменной для сохранения данных, но $this->data все равно получает очищено.
  • Проверено на непредвиденный сброс состояния в переопределенных методах, но ничто не изменяет напрямую $this->data.
В блейде я даже вызвал функцию, в которой ничего не было, но мои данные все равно были очищены...
ВопросЧто может привести к удалению $this->данных во время фаза обезвоживания? Почему эта проблема возникает только при нажатии на строку и как ее можно отладить или устранить?

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

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

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

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

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

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