greystoneweb/livewire-datatables

0.1.3 2024-02-26 23:09 UTC

This package is auto-updated.

Last update: 2024-09-06 22:08:51 UTC


README

简介

基本示例

使用make命令:php artisan make:datatable Users/UsersTable

将会创建两个文件:Users/UsersTable.phpusers/users-table-row.blade.php 在您的Livewire目录中。

功能

排序

要启用排序,只需在列上调用 sortable() 方法。

public function columns(): array
{
    return [
        Column::make('Name')
            ->sortable()
    ];
}

如果列标题标签与数据库列不同,请确保在 make() 方法的第二个参数中指定它。

Column::make('Name', 'full_name')
    ->sortable()

如果您需要任何自定义排序逻辑,可以将回调函数传递给 sortable() 方法。

Column::make('Name')
    ->sortable(function ($query, $direction) {
        $query->orderBy('last_name', $direction);
    })

过滤器

搜索

导出结果

要使用此功能,您必须安装Laravel Excel

示例

在组件类内部

use Greystoneweb\LivewireDataTables\DataTable;
use Greystoneweb\LivewireDataTables\Traits\Exportable;

class UsersTable extends DataTable
{
    // Use the Exportable trait
    use Exportable;

    // Define a fileName method that returns the filename
    protected function fileName(): string
    {
        return 'users'.date('Y-m-d').'.csv';
    }
    ...
}

然后您可以通过 wire:click 在视图中调用 export() 方法,所有结果将自动导出到CSV文件,并应用筛选/排序。如果导出的文件看起来不太对劲,您可以创建一个自定义的 Export 实例,该实例扩展 Greystoneweb\LivewireDataTables\Export,并在数据表组件的 exporterInstance 方法中返回它。这对于处理关系尤其有用。

示例

您的组件

use Greystoneweb\LivewireDataTables\DataTable;
use Greystoneweb\LivewireDataTables\Export;
use Greystoneweb\LivewireDataTables\Traits\Exportable;

class UsersTable extends DataTable
{
    // Use the Exportable trait
    use Exportable;

    // Define a fileName method that returns the filename
    protected function fileName(): string
    {
        return 'users'.date('Y-m-d').'.csv';
    }

    public function exporterInstance(): Export
    {
        return new UsersExport($this);
    }
    ...
}

您的自定义导出器

use Greystoneweb\LivewireDataTables\Export;
use Maatwebsite\Excel\Concerns\WithMapping;

class UsersExport extends Export implements WithMapping
{
    public function headings(): array
    {
        return [
            'Name',
            'Organization',
            'Email',
        ];
    }

    public function map($user): array
    {
        return [
            $user->name,
            $user->organization->name,
            $user->email,
        ];
    }
}