Laravel Datatables - 一个视图上的多个表

Pec*_*277 6 php datatables laravel

我使用 laravel 5.4 和最新版本的 yajra/laravel-datatables 作为服务。

我让它在页面上的一个数据表上运行良好。我想创建一个包含不相关表的仪表板。用户、产品、预订等

我希望我的控制器看起来像这样:

public function index(ProductsDataTable $productDatatable, UsersDataTable $userDatatable)
{    
    $user = Auth::user();

    $products = $user->products;

    return view('admin.dashboard', compact('products', 'user', 'productDatatable', 'userDatatable'));
}
Run Code Online (Sandbox Code Playgroud)

在我的刀刃上做

@section('content')
{!! $productDatatable->table() !!}
{!! $userDatatable->table() !!}
@endsection

@push('scripts')
{!! $dataTable->scripts() !!}
@endpush
Run Code Online (Sandbox Code Playgroud)

然而这显然是行不通的。我不确定如何继续。

我尝试为每个数据表创建一条路线,但不确定如何从仪表板控制器引用它。

小智 6

我确信有一种更好的方法可以在一个视图中实现多个表,但这是我在审查此后想到的。评论/改进将受到高度赞赏。

控制器

控制器将在方法中渲染一次表,但将从方法或方法index()中获取数据。getUsers()getProducts()

// DashboardController.php

public function index(UsersDataTable $usersDataTable, ProductsDataTable $productsDataTable)
{
    return view('dashboard.index', [
        'usersDataTable' => $usersDataTable->html(),
        'productsDataTable' => $productsDataTable->html()
    ]);
}

//Gets Users JSON

public function getUsers(UsersDataTable $usersDataTable)
{
    return $usersDataTable->render('admin.dashboard');
}

//Gets Products JSON

public function getProducts(ProductsDataTable $productsDataTable)
{
    return $productsDataTable->render('admin.dashboard');
}
Run Code Online (Sandbox Code Playgroud)

路线

添加两个额外的路由,用于获取用户和项目数据。

// web.php

Route::get('/', 'DashboardController@index')->name('dashboard.index');
Route::get('projects', 'DashboardController@getProjects')->name('dashboard.projects');
Route::get('users', 'DashboardController@getUsers')->name('dashboard.users');

Run Code Online (Sandbox Code Playgroud)

数据表服务类

对于UsersDataTableProductsDataTable服务类别,请包括我们上面创建的相关路线。

// UsersDataTable.php

public function html()
{
    return $this->builder()
                ->minifiedAjax( route('dashboard.users') );
}
Run Code Online (Sandbox Code Playgroud)

看法

// dashboard.blade.php

@section('content')

   {!! $productsDataTable->table() !!}
   {!! $usersDataTable->table() !!}

@endsection

@push('scripts')

   {!! $productsDataTable->scripts() !!}
   {!! $usersDataTable->scripts() !!}

@endpush
Run Code Online (Sandbox Code Playgroud)


Pec*_*277 3

向包的创建者提交了问题。这是他的回应:

不幸的是,DataTable 服务类被设计为处理单个实例。但是,我认为我们可以通过在请求中添加额外的查询参数来解决这个问题,以便我们识别正在请求哪个类来处理该请求。

也许像下面这样:

public function index(ProductsDataTable $productDatatable, UsersDataTable $userDatatable)
{    
if (request()->has('product') {
    return $productDatatable->render('view');
}

if (request()->has('user') {
    return $productDatatable->render('view');
}

$user = Auth::user();

$products = $user->products;

return view('admin.dashboard', compact('products', 'user', 'productDatatable', 'userDatatable'));
}
Run Code Online (Sandbox Code Playgroud)