yajra数据表中的搜索选择选项未显示所有页面

时间:2020-10-29 17:57:56

标签: php laravel drop-down-menu datatables yajra-datatable

当我在laravel中使用yajra数据表时,希望有所帮助 搜索选择选项仅显示当前页面,请注意以下屏幕快照,因为Iam试图在搜索选项中获取(管理员,编辑者和用户),但显示(仅用户和编辑者)。如下面的屏幕截图 https://i.stack.imgur.com/wUAv6.png 这就是我使用<script src="//cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js"></script>的引用js,我通过{!! $dataTable->scripts() !!} and {!! $dataTable->table() !!}来获取刀片文件中的数据

下面是我对UsersDataTable.php的整个代码

<?php
 
namespace App\DataTables;
 
use App\User;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Services\DataTable;
 
class UsersDataTable extends DataTable
{
 
    public function dataTable($query)
    {
        return datatables()
            ->eloquent($query)
            ->editColumn('created_at', function ($query) {
                return Carbon::parse($query->created_at)->format('Y-m-d');
            })
 
 
            ->addColumn('roles',  function ($query) {
                return $query->roles->map(function ($role) {
                    return $role->name;
                })->implode('<br>');
            })
            ->editColumn('profile', function ($model) {
                return $model->profile->lang == "en" ? __("lang.English") : ($model->profile->lang == "ar" ? __("lang.Arabic") : ($model->profile->lang  == Null ? __("lang.Without") :
                            ''));
            })
            ->filterColumn('profile.lang', function ($query, $keyword) {
                if (stristr(__("lang.English"), $keyword))
                    $query->whereHas('profile', function (Builder $query) {
                        $query->where('lang', 'en');
                    });
                elseif (stristr(__("lang.Arabic"), $keyword))
                    $query->whereHas('profile', function (Builder $query) {
                        $query->where('lang', 'ar');
                    });
                elseif (stristr(__("lang.Without"), $keyword))
                    $query->whereHas('profile', function (Builder $query) {
                        $query->where('lang', Null);
                    });
            })
            ->filterColumn('roles', function ($query, $keyword) {
                if (stristr('Editor', $keyword))
                    $query->whereHas('roles', function (Builder $query) {
                        $query->where('name', 'Editor');
                    });
                elseif (stristr('User', $keyword))
                    $query->whereHas('roles', function (Builder $query) {
                        $query->where('name', 'User');
                    });
                elseif (stristr('Admin', $keyword))
                    $query->whereHas('roles', function (Builder $query) {
                        $query->where('name', 'Admin');
                    });
            })
 
            ->addColumn(
                'show',
                '<a href="{{ url("profile/".$id)}}" class="btn btn-primary btn-sm d-flex flex-nowrap"><i class="fas fa-eye mr-1 my-auto"></i> {{ __("lang.Show") }}</a>'
            )
            ->addColumn(
                'edit',
                '<a href="{{ route(adminview("users.edit"),$id)}}" class="btn btn-info btn-sm d-flex flex-nowrap"><i class="fas fa-edit mr-1 my-auto"></i> {{ __("lang.Edit") }}</a>'
            )
            ->addColumn(
                'delete',
                'admin.users_delBtn'
            )
            ->addColumn('checkbox', '<input type="checkbox" name="checked[]" class="item_checkbox" value="{{ $id }}" />')
            ->rawColumns([
                'checkbox', 'show', 'edit', 'delete', 'roles'
            ]);
    }
 
 
    public function query(User $model)
    {
        return $model->newQuery()->with('roles', 'profile')
            ->selectRaw('users.*')
    }
 
    public function html()
    {
        return $this->builder()
            ->setTableId('users-table')
            ->minifiedAjax()
            ->orderBy(1)
            ->columns($this->getColumns())
            ->parameters([
                'dom' => 'Blfrtip',
 
 
                'buttons' => [
                    ['create', 'print', 'excel', 'reload'],
                    ['className' => 'delBtn', 'text' => '<i class="fa fa-trash"></i> ' . trans("lang.Delete")]
                ],
 
                'lengthMenu' => [[10, 25, 50, 100, 250, -1], [10, 25, 50, 100, 250, trans('lang.All')]],
 
 
                'initComplete' => "function () {
                    this.api().columns([1,2,3,6]).every(function () {
                        var column = this;
                        var input = document.createElement(\"input\");
                        $(input).attr( 'style', 'text-align: center;width: 100%');
                        $(input).appendTo($(column.footer()).empty())
                        .on('keyup', function () {
                            column.search($(this).val(), false, false, true).draw();
                        });
                    });
 
                     
                    this.api().columns([4,5]).every( function () {
                        var column = this;
                        var select = $('<select><option value=\"\"></option></select>')
                            .appendTo( $(column.footer()).empty() )
                            .on( 'change', function () {
                                var val = $.fn.dataTable.util.escapeRegex(
                                    $(this).val()
                                );
          
                                column
                                    .search( val )
                                    .draw();
                                     
                                 
                            } );
                            column.data().unique().sort().each( function ( d, j ) {
                            select.append( '<option value=\"'+d+'\">'+d+'</option>' )
                        } );
                    } );
                         
 
 
                }",
 
            ]);
    }
 
 
    protected function getColumns()
    {
        return [
            Column::make('checkbox')
                ->title('<input type="checkbox" class="check_all" onclick="check_all()" />')
                ->orderable(false)
                ->searchable(false)
                ->exportable(false)
                ->printable(false),
 
 
            Column::make('id')
                ->title(__('lang.User id')),
            Column::make('name')
                ->title(__('lang.Name')),
            Column::make('email')
                ->title(__('lang.Email')),
            Column::make('roles')
                ->title(__('lang.Role')),
            Column::make('profile', 'profile.lang')
                ->title(__('lang.Favorite language')),
            Column::make('created_at')
                ->title(__('lang.Created_at')),
 
 
 
            Column::computed('show')
                ->title(__('lang.Show'))
                ->orderable(false)
                ->searchable(false)
                ->exportable(false)
                ->printable(false),
            Column::computed('edit')
                ->title(__('lang.Edit'))
                ->orderable(false)
                ->searchable(false)
                ->exportable(false)
                ->printable(false),
            Column::computed('delete')
                ->title(__('lang.Delete'))
                ->orderable(false)
                ->searchable(false)
                ->exportable(false)
                ->printable(false),
        ];
    }
 
 
    protected function filename()
    {
        return 'Users_' . date('YmdHis');
    }
}

0 个答案:

没有答案