使用Laravel 6.5.2,PHP 7.2.26(也尝试7.3.3)和“ yajra / laravel-datatables”:“ v1.5.0”
数据表出现,但没有任何数据。
样板房包含数据。
路线
Route::resource('apartments', 'ApartmentController')
控制器
<?php
namespace App\Http\Controllers;
use App\Apartment;
use App\DataTables\ApartmentDataTable;
use Yajra\DataTables\Services\DataTable;
class ApartmentController extends Controller
{
public function qindex(ApartmentDataTable $dataTable)
{
return $dataTable->render('apartments.index');
}
}
数据表服务
<?php
namespace App\DataTables;
use App\Apartment;
use Illuminate\Database\Eloquent\Builder;
use Yajra\DataTables\DataTableAbstract;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Html\Editor\Editor;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Services\DataTable;
class ApartmentDataTable extends DataTable
{
/**
* Build DataTable class.
*
* <strong i="18">@param</strong> mixed $query Results from query() method.
* <strong i="19">@return</strong> DataTableAbstract
*/
public function dataTable($query)
{
return datatables()
->eloquent($query)
->addColumn('action', 'apartment.action');
}
/**
* Get query source of dataTable.
*
* <strong i="20">@param</strong> Apartment $model
* <strong i="21">@return</strong> Builder
*/
public function query(Apartment $model)
{
return $model->newQuery();
}
/**
* Optional method if you want to use html builder.
*
* <strong i="22">@return</strong> \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->setTableId('apartment-table')
->columns($this->getColumns())
->minifiedAjax()
->dom('Bfrtip')
->orderBy(1)
->buttons(
Button::make('create'),
Button::make('export'),
Button::make('print'),
Button::make('reset'),
Button::make('reload')
);
}
/**
* Get columns.
*
* <strong i="23">@return</strong> array
*/
protected function getColumns()
{
return [
Column::computed('action')
->exportable(false)
->printable(false)
->width(60)
->addClass('text-center'),
Column::make('id'),
Column::make('address'),
Column::make('created_at'),
Column::make('updated_at'),
];
}
/**
* Get filename for export.
*
* <strong i="24">@return</strong> string
*/
protected function filename()
{
return 'Apartment_' . date('YmdHis');
}
}
看法
@extends('layouts.app')
@section('content')
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="card">
<div class="card-header">Table</div>
<div class="card-body">
{{ $dataTable->table() }}
</div>
</div>
</div>
</div>
</div>
</div>
<strong i="7">@endsection</strong>
@push('scripts')
<script src="{{ asset('vendor/datatables/buttons.server-side.js') }}"></script>
{{ $dataTable->scripts() }}
<strong i="8">@endpush</strong>
在浏览器中的结果
<script type="text/javascript">
(function(window,$){window.LaravelDataTables=window.LaravelDataTables||{};window.LaravelDataTables["apartment-table"]=$("#apartment-table").DataTable({"serverSide":true,"processing":true,"ajax":{"url":"","type":"GET","data":function(data) {
for (var i = 0, len = data.columns.length; i < len; i++) {
if (!data.columns[i].search.value) delete data.columns[i].search;
if (data.columns[i].searchable === true) delete data.columns[i].searchable;
if (data.columns[i].orderable === true) delete data.columns[i].orderable;
if (data.columns[i].data === data.columns[i].name) delete data.columns[i].name;
}
delete data.search.regex;}},"columns":[{"data":"action","name":"action","title":"Action","orderable":false,"searchable":false,"width":60,"className":"text-center"},{"data":"id","name":"id","title":"Id","orderable":true,"searchable":true},{"data":"address","name":"address","title":"Address","orderable":true,"searchable":true},{"data":"created_at","name":"created_at","title":"Created At","orderable":true,"searchable":true},{"data":"updated_at","name":"updated_at","title":"Updated At","orderable":true,"searchable":true}],"dom":"Bfrtip","order":[[1,"desc"]],"buttons":[{"extend":"create"},{"extend":"export"},{"extend":"print"},{"extend":"reset"},{"extend":"reload"}]});})(window,jQuery);
</script>
也许是打字错误?
// should be index
public function qindex(ApartmentDataTable $dataTable)
否...。我这样做是为了测试并意外复制了。
您的代码看起来不错。 控制台上有任何错误?
任何地方都没有错误...
$ dataTable-> scripts()生成代码:
<script type="text/javascript">(function(window,$){window.LaravelDataTables=window.LaravelDataTables||{};window.LaravelDataTables["apartment-table"]=$("#apartment-table").DataTable({"serverSide":true,"processing":true,"ajax":{"url":"","type":"GET","data":function(data) {
for (var i = 0, len = data.columns.length; i < len; i++) {
if (!data.columns[i].search.value) delete data.columns[i].search;
if (data.columns[i].searchable === true) delete data.columns[i].searchable;
if (data.columns[i].orderable === true) delete data.columns[i].orderable;
if (data.columns[i].data === data.columns[i].name) delete data.columns[i].name;
}
delete data.search.regex;}},"columns":[{"data":"action","name":"action","title":"Action","orderable":false,"searchable":false,"width":60,"className":"text-center"},{"data":"id","name":"id","title":"Id","orderable":true,"searchable":true},{"data":"address","name":"address","title":"Address","orderable":true,"searchable":true},{"data":"created_at","name":"created_at","title":"Created At","orderable":true,"searchable":true},{"data":"updated_at","name":"updated_at","title":"Updated At","orderable":true,"searchable":true}],"dom":"Bfrtip","order":[[1,"desc"]],"buttons":[{"extend":"create"},{"extend":"export"},{"extend":"print"},{"extend":"reset"},{"extend":"reload"}]});})(window,jQuery);
</script>
如果我把dd($ dataTable-> ajax()); 返回之前在Controller中,然后具有Illuminate \ HttpJsonResponse和完整数据。
首先,对不起我的英语
我有同样的问题,并为我找到解决方案
如果我用
@section('内容')
{{$ dataTable-> table()}}
@endsection
@push('scripts')
{{$ dataTable-> scripts()}}
@endpush
这是行不通的。 没有数据/
但是,当我不使用@push和@scripts时,
@section('内容')
{{$ dataTable-> table()}}
{{$ dataTable-> scripts()}}
@endsection
我不知道这是对的,但是这项工作。
我在bottstrap.js中粘贴这样的代码
`尝试{
window.Popper = require('popper.js')。default;
window。$ = window.jQuery = require('jquery');
require('bootstrap');
require('datatables.net-bs4');
require('datatables.net-buttons-bs4');
}抓住(e){}`
在app.blade.php中
<script src="{{ asset('js/app.js') }}"></script>
<script src="{{ asset('vendor/datatables/buttons.server-side.js') }}"></script>
而且工作正常
而且我还注意到,当我使用
it's default laravel setup, I get errors in console that jQuery and DataTables not defined
if I use or errors in console empty, but data don't showing, it's don't work
and if I delete defer, delete @push and delete @scripts it's begin work
@ 3s777感谢您的提示! 解决方法确实有帮助:
@section('content')
{{ $dataTable->table() }}
{{ $dataTable->scripts() }}
<strong i="7">@endsection</strong>
你好
我正在使用adminlte,我的解决方法是
代替
@Push('scripts')
{{$ dataTable-> scripts()}}
@endpush
利用
@Push('js')
{{$ dataTable-> scripts()}}
@endpush
我使用https://getstisla.com/getting-started ,但我遇到了同样的问题。
我认为这与模板不在yajra包或数据表上有关,这是一个问题,因为控制台未显示错误。
我也有同样的问题。 我通过将@Stack('scripts')添加到布局(app.blade)中来解决此问题。 像这样
<script src="{{ asset('js/app.js') }}"></script>
@stack('scripts')
它仍然无法与我合作,我已完成上述所有操作,但仍未显示任何数据,有任何一项可以帮助我
我做了什么使它工作(Laravel 7):
编辑resources/js/bootstrap.js
并添加以下内容:
require('bootstrap');
require('datatables.net-bs4');
require('datatables.net-buttons-bs4');
编辑resources/scss/app.scss
并添加以下内容:
// DataTables
<strong i="12">@import</strong> "~datatables.net-bs4/css/dataTables.bootstrap4.css";
<strong i="13">@import</strong> "~datatables.net-buttons-bs4/css/buttons.bootstrap4.css";
然后使用
<script src="{{ mix('js/app.js') }}"></script>
// instead of
<script src="{{ asset('js/app.js') }}"></script>
<script src="{{ asset('vendor/datatables/buttons.server-side.js') }}"></script>
将脚本移到底部
@stack('scripts')
</body>
</html>
仍然没有对我工作
我修正的脚本由于输入错误而无法加载
问题是默认布局文件的底部有@yield('footer_scripts')
但table.blade文件具有@section('footerscripts')
希望其他人能更好地详细解释。
最有用的评论
首先,对不起我的英语
我有同样的问题,并为我找到解决方案
如果我用
@section('内容')
{{$ dataTable-> table()}}
@endsection
@push('scripts')
{{$ dataTable-> scripts()}}
@endpush
这是行不通的。 没有数据/
但是,当我不使用@push和@scripts时,
@section('内容')
{{$ dataTable-> table()}}
{{$ dataTable-> scripts()}}
@endsection
我不知道这是对的,但是这项工作。
我在bottstrap.js中粘贴这样的代码
`尝试{
window.Popper = require('popper.js')。default;
window。$ = window.jQuery = require('jquery');
}抓住(e){}`
在app.blade.php中
而且工作正常