如何在 Laravel 的一页上拥有多个 Yajra 数据表?

Posted

技术标签:

【中文标题】如何在 Laravel 的一页上拥有多个 Yajra 数据表?【英文标题】:How can I have Multiple Yajra Datatables on one page in Laravel? 【发布时间】:2021-11-19 14:56:57 【问题描述】:

问题:我需要在现金页面中使用“产品数据表” 此页面上已存在“Cash DataTable”。

我已经搜索过这个问题,但我很惊讶以前没有人问过这个问题,所以当我找到这个问题的解决方案时,我决定与其他程序员分享我的解决方案。希望对你有用。

让我先说一下我工作的版本。

“laravel/框架”:“^8.40” "yajra/laravel-datatables-buttons": "^4.0", "yajra/laravel-datatables-html": "^4.0", “yajra/laravel-datatables-oracle”:“~9.0”

现在我展示我的项目结构

我有路线:列表

 GET|HEAD | cash | cash.index| App\Http\Controllers\CashController@index
 GET|HEAD | product | product.index| App\Http\Controllers\ProductController@index

CashController.php

public function index(CashDataTable $cashDataTable)


    return $cashDataTable->render('cash.index');

Cash.index.blade.php

!! $dataTableCash->table(['id'=>'dataTable']) !!
!! $dataTableCash->scripts() !!

CashDataTable.php

使用 App\Models\Cash;

class CashDataTable extends DataTable

    public function dataTable($query)
    
        $dataTable = new EloquentDataTable($query);

        return $dataTable->addColumn('action', 'cash.datatables_actions');
    
    
    public function html()
    
        return $this->builder()
            ->columns($this->getColumns())
            ->minifiedAjax()
            ...
    
    ...

ProductDataTable.php

use App\Models\Product;

class ProductDataTable extends DataTable

    public function dataTable($query)
    
        $dataTable = new EloquentDataTable($query);

        return $dataTable->addColumn('action', 'product.datatables_actions');
    
    
    public function html()
    
        return $this->builder()
            ->columns($this->getColumns())
            ->minifiedAjax()
            ...
    
    ...

【问题讨论】:

【参考方案1】:

我认为“Yajra \ DataTables \ Services;”设计为只显示一个表,但我找到了解决方案:

首先,我们需要覆盖和更改 CashDataTable 和 ProductDataTable 中的默认 dataTable 变量, 其次,我们需要在 HTML minifiedAjax 中直接设置路由 URL。

CashDataTable.php

use App\Models\Cash;

protected $dataTableVariable = 'dataTableCash';

class CashDataTable extends DataTable

    public function dataTable($query)
    
        $dataTable = new EloquentDataTable($query);

        return $dataTable->addColumn('action', 'cash.datatables_actions');
    
    
    public function html()
    
        return $this->builder()
            ->columns($this->getColumns())
            ->minifiedAjax('/cash')
            ...
    
    ...

ProductDataTable.php

use App\Models\Product;

class ProductDataTable extends DataTable

    protected $dataTableVariable = 'dataTableProduct';

    public function dataTable($query)
    
        $dataTable = new EloquentDataTable($query);

        return $dataTable->addColumn('action', 'product.datatables_actions');
    
    
    public function html()
    
        return $this->builder()
            ->columns($this->getColumns())
            ->minifiedAjax('/product')
            ...
    
    ...

现在在 CashController 中,我们需要将变量设置为 HTML builder。

CashController.php

public function index(CashDataTable $cashDataTable, ProductDataTable $productDataTable)

    $dataTableProduct = $productDataTable->html();

    return $cashDataTable->render('cash.index', compact('dataTableProduct'));

Cash.index.blade.php

!! $dataTableCash->table(['id'=>'dataTableCash']) !!
!! $dataTableCash->scripts() !!

!! $dataTableProduct->table(['id'=>'dataTableProduct']) !!
!! $dataTableProduct->scripts() !!

【讨论】:

以上是关于如何在 Laravel 的一页上拥有多个 Yajra 数据表?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Livewire 在一页中进行多个分页

如何使我的背景图像仅出现在 rails 4 的一页上?

如何在 Drupal 的一页上显示 2 个包含 2 种内容类型的表格?

如何在一页上切换多个 tabSlideOUT 选项卡

如何在一页上运行多个版本的 Zepto.js? [关闭]

如何在一页上放置多个画布js动画。 (创建js)