Laravel 加载模型时 Livewrie 数据表超时

Laravel Livewrie Datatables Timeout when loading model

当我设置数据表时,无论我使用什么对象,我最终都会尝试加载并最终超时。我什至不确定如何开始调试它。

我遵循了这里的一些示例:https://livewire-datatables.com/ 和简单的数据表,如:

<livewire:datatable model="App\User" exclude="planet_id, bio, latitude, longitude, updated_at" />

工作完美。我遇到的问题是当我尝试任何需要它自己的数据表 class.

我的steps/code如下:

php artisan livewire:make jobs-data-table

工作数据-table.blade.php

<livewire:jobs-data-table searchable="title" exportable />

工作数据表

<?php

namespace App\Http\Livewire;

use \App\Models\Job;
use Livewire\Component;
use Illuminate\Support\Str;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\DB;
use Mediconesystems\LivewireDatatables\Column;
use Mediconesystems\LivewireDatatables\DateColumn;
use Mediconesystems\LivewireDatatables\TimeColumn;
use Mediconesystems\LivewireDatatables\NumberColumn;
use Mediconesystems\LivewireDatatables\BooleanColumn;
use Mediconesystems\LivewireDatatables\Http\Livewire\LivewireDatatable;


class JobsDataTable extends Component
{
    public function builder()
    {
        return
            Job::query()->take(10)->get(2);
    }
}

然后我设置了一个简单的测试路线:

Route::get('/test', function () {
    return view('/livewire/jobs-data-table');
});

路由有效,但最终超时,没有超过超时异常的错误。

您正在创建一个无限循环 - 通过使组件一遍又一遍地渲染自身。

您的路由调用视图 livewire/jobs-data-table.blade.php - 视图通过 <livewire:jobs-data-table ../> 调用 JobsDataTable 组件。这将 return 视图的一个新实例 livewire/jobs-data-table,它将再次初始化 JobsDataTable 组件并继续该循环直到超时。

通常情况下,在渲染整页 Livewire 组件时,您会在路由中调用 class,而不是直接调用视图,这样您就可以渲染整个组件而不仅仅是视图 - 这意味着使用render()livewire 文件夹中的任何视图都是不好的做法。

Route::get('/test', App\Http\Livewire\JobsDataTable::class);

但是,这样做并不能解决您的问题,它不会改变任何事情。您需要渲染组件 一次.

要解决您的问题,您需要以不在视图中调用自身的方式呈现组件。这意味着您的 livewire/jobs-data-table.blade.php 视图无法调用 <livewire:jobs-data-table ../>。由于没有更多的代码来展示它的作用,因此很难更明确地说明到底要改变什么。