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 ../>
。由于没有更多的代码来展示它的作用,因此很难更明确地说明到底要改变什么。
当我设置数据表时,无论我使用什么对象,我最终都会尝试加载并最终超时。我什至不确定如何开始调试它。
我遵循了这里的一些示例: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 ../>
。由于没有更多的代码来展示它的作用,因此很难更明确地说明到底要改变什么。