Laravel-datatables: рдХрд╕реНрдЯрдо рдбреНрд░реЙрдкрдбрд╛рдЙрди рдлрд┐рд▓реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдЕрдХреНрддреВре░ 2017  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: yajra/laravel-datatables

рд╕рдорд╕реНрдпрд╛ рдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢


рдореБрдЭреЗ рдХрд╕реНрдЯрдо рдбреНрд░реЙрдк рдбрд╛рдЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣ рдбреЗрдЯрд╛ рд╣реИ рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЕрдм рдореБрдЭреЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдорд╛рди рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ [рдиреЛрдЯ: рдореБрдЭреЗ рд▓рд╛рд░рд╡реЗрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдореВрд▓реНрдп рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╕реНрдЯрдо рдореВрд▓реНрдп рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдХрд╕реНрдЯрдо рдореВрд▓реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред]

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ jquery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдЬреЛрдбрд╝рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдбреЗрдЯрд╛ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рд░реНрд╡рд╛рд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рдЗрд╕ рдорд╛рди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

$(function () {
    var t = $('#user').DataTable({
        order: [[ 0, 'desc' ]],
        processing: true,
        serverSide: true,
        ajax: {
            url: '{!! route('datatables.data') !!}',
            data: function(d) {
                d.name = $('input[name=name]').val();
                d.email = $('input[name=email]').val();
            }
        },
        columns: [
            { data: 'id', name: 'id' },
            { data: 'name', name: 'name' },
            { data: 'email', name: 'email' },
            { data: 'arrival_date', name: 'arrival_date', orderable: true, searchable: true },
            { data: 'pick_up', name: 'pick_up', orderable: true, searchable: true },
            { data: 'destination', name: 'destination', orderable: true, searchable: true},
            { data: 'trekking_start_date', name: 'trekking_start_date', orderable: true, searchable: true},

            { data: 'trekking_end_date', name: 'trekking_end_date', orderable: true, searchable: true},
            { data: 'action', name: 'action', orderable: false, searchable: false},
        ]
    });
});

$(document).ready(function() {
    $('<label style="margin-left: 10px;">Filter by ' +
        '<select class="form-control input-sm">'+
            '<option value="volvo">Completed Trip</option>'+
            '<option value="saab">Upcoming Trip</option>'+
        '</select>' + 
        '</label>').appendTo("#user_wrapper #user_length");
});

рдФрд░ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдореЗрд░рд╛ рдХреНрд╡реЗрд░реА рдХреЛрдб

public function getClients(Request $request)
    {
        if($request->ajax()) {
            return Datatables::of(DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC')))
                    //}))
                    ->addColumn('arrival_date', function($user){
                        if(isset(Helper::getFlightsByClientID($user->id)->arrival_date)) {
                            return date('M j, Y', strtotime(Helper::getFlightsByClientID($user->id)->arrival_date));
                        } else {
                            return 'N/A';
                        }
                    })
                    ->addColumn('pick_up', function($user){
                        if(isset(Helper::getFlightsByClientID($user->id)->pick_up)) {
                            return Helper::getFlightsByClientID($user->id)->pick_up == 1 ? 'Yes' : 'No'; 
                        } else {
                            return 'N/A';
                        }
                    })
                    ->addColumn('destination', function($user){
                        if(isset(Helper::getTreksByClientID($user->id)->trekking_region_id)) {
                            return Helper::getTrekByID(Helper::getTreksByClientID($user->id)->trekking_region_id)->name; 
                        } else {
                            return 'N/A';
                        }
                    })
                    ->addColumn('trekking_start_date', function($user){
                        if(isset(Helper::getTreksByClientID($user->id)->trekking_start_date)) {
                            return date('M j, Y', strtotime(Helper::getTreksByClientID($user->id)->trekking_start_date));
                        } else {
                            return 'N/A';
                        }
                    })
                    ->addColumn('trekking_end_date', function($user){
                        if(isset(Helper::getTreksByClientID($user->id)->trekking_end_date)) {
                            return date('M j, Y', strtotime(Helper::getTreksByClientID($user->id)->trekking_end_date));
                        } else {
                            return 'N/A';
                        }
                    })
                    ->addColumn('action', function($user){
                        $html = '';
                        $html .= '<a class="btn bg-green btn-flat btn-xs" href="'.route('user.clients.edit', $user->id).'">Edit</a>';

                        if(auth()->user()->hasRole('superadmin')) {
                            $html .= ' <a onclick="if(!confirm(\'Are u sure to delete?\')) return false;" class="btn bg-red btn-flat btn-xs" href="'.route('user.clients.delete', $user->id).'">Delete</a>';
                        }

                        return $html;

                    })
                    ->make(true);
        } else {
            abort(400, 'Bad Request.');
        }
    }

рдпрджрд┐ рд▓рд╛рдЧреВ рд╣реЛ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдЬреЛ рд╕рдВрджрд┐рдЧреНрдз рдмрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдкреЗрд╕реНрдЯ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрдбрд╛рдЙрди php рдХреЛрдб рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: md5-29f7d4c1ff52f0e396b313bfe2550e56

рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╡рд░рдг

рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ! рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯрд┐рдХрдЯ рдХреЛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ / рдЯрд┐рдХрдЯреЛрдВ рдкрд░ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо Ubuntu 16.04
  • PHP рд╕рдВрд╕реНрдХрд░рдг 7.0.22
  • рд▓рд╛рд░рд╡реЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 5.4
  • рд▓рд╛рд░рд╡реЗрд▓-рдбрд╛рдЯрд╛рд╡реЗрдмрд▓реНрд╕ рд╕рдВрд╕реНрдХрд░рдг 1.10.16

Screenshot

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдлрд╝рд┐рд▓реНрдЯрд░ рдмрджрд▓рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдбреНрд░реЙ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

<select class="form-control input-sm" id="custom-filter" onchange="$('#user').DataTable().draw()">

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдзрд░реНрдорд╛рдВрддрд░рд┐рдд

DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC'))

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:

DB::table('users')->whereNot(...);

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ рд╢рдВрдЦрджреЗрд╡рдкрд╛рдж рдЖрдк рдЗрд╕реЗ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреЛ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдореЗрдВ рдбреЗрдЯрд╛рдЯреИрдмрд▓реНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред


$model = new Example();
$model->where('column_to_filter','=',$this->request->get('filter_by'));

return datatables()->eloquent($model);

рдЖрдк рдмреЗрд╢рдХ рд╕рд╢рд░реНрдд IFs рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


$model = new Example();

if($this->request->has('name')) {
     $model->where('name','=','predefined value');
}

return datatables()->eloquent($model);

рдпрджрд┐ рдЖрдк рдКрдкрд░ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЙрдХреНрд╕ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрддрдВрдн рдЦреЛрдЬ , рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ

рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдКрдкрд░ рдХреА рдЫрд╡рд┐ рдХреА рддрд░рд╣ рдбреНрд░реЙрдкрдбрд╛рдЙрди рдХреЛ рдХреИрд╕реЗ рдмрд╛рдВрдзреЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╕реНрдЯрдо jquery рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдБрдзрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдбреЗрдЯрд╛рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдорд╛рди рддрдм рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдбреНрд░реЙрдкрдбрд╛рдЙрди рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рд╣реЛред [рдХреГрдкрдпрд╛ рдореЗрд░рд╛ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдЦреЗрдВ]

рдЪрдпрди рдмреЙрдХреНрд╕ рдкрд░ id рдЬреЛрдбрд╝реЗрдВред

<select class="form-control input-sm" id="custom-filter">

рдлрд┐рд░ рдЗрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред

        ajax: {
            url: '{!! route('datatables.data') !!}',
            data: function(d) {
                d.name = $('input[name=name]').val();
                d.email = $('input[name=email]').val();
                d.filter = $('#custom-filter').val();
            }
        },

рдлрд┐рд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВред

if ($filter = request('filter')) {
    $query->where('filter', $filter);
}

рдлрд╝рд┐рд▓реНрдЯрд░ рдмрджрд▓рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдбреНрд░реЙ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╢рд╛рдпрдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

<select class="form-control input-sm" id="custom-filter" onchange="$('#user').DataTable().draw()">

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдзрд░реНрдорд╛рдВрддрд░рд┐рдд

DB::select(DB::Raw('SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM role_user) ORDER BY users.id DESC'))

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:

DB::table('users')->whereNot(...);

рдзрдиреНрдпрд╡рд╛рдж рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗ рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯрд╛рд░ рджреЗрдирд╛ рди рднреВрд▓реЗрдВред :) рдзрдиреНрдпрд╡рд╛рдж!

рдбреНрд░реЙрдкрдбрд╛рдЙрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдбреНрд░реЙрдкрдбрд╛рдЙрди рдореЗрдВ рдореВрд▓реНрдп рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдСрд░реНрдбрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

Screenshot

рдЖрдк рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рддрд┐рдерд┐ рддрдХ рдСрд░реНрдбрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдкрдХреЛ рдпрд╣ js рд╕реНрддрд░ рдкрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛ рдЙрд╕ рдХреЙрд▓рдо рдХреЗ рд▓рд┐рдП рдбрд┐рдлреЙрд▓реНрдЯ рдСрд░реНрдбрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

рд╣рд╛рдВ, рдХреГрдкрдпрд╛ рдХреЛрдИ рднреА рдЙрджрд╛рд╣рд░рдгред

рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИред рд░реЗрдлрд░реА рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ js api рдбреЙрдХреНрд╕ https://datatables.net/reference/api/ рджреЗрдЦреЗрдВред рдЪрд╛рд▓ рддрд╛рд▓рд┐рдХрд╛ redraw рдлрд╝рдВрдХреНрд╢рди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ js рдСрд░реНрдбрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

@yajra рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ

            data: function(d) {
                d.name = $('input[name=name]').val();
                d.email = $('input[name=email]').val();
                d.filter = $('#custom-filter').val();
            }

minifiedAjax() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ @ рд╕рд┐рд╕реНрдЯреЗрдорд╕реНрд╡реЗрдмрдмреНрд░реИрд╕рд┐рд▓ :

$script = '
data.name = $('input[name=name]').val();
data.email = $('input[name=email]').val();
data.filter = $('#custom-filter').val();
';

return $this
            ->builder()
            ...
            ->minifiedAjax($url = '', $script = null, $data = [])
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

sangnguyenplus picture sangnguyenplus  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Mopster picture Mopster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kamrava picture kamrava  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ahmadbadpey picture ahmadbadpey  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jackrsantana picture jackrsantana  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ