Laravel-datatables: le filtre des tables de données ne fonctionne pas

Créé le 8 mai 2017  ·  3Commentaires  ·  Source: yajra/laravel-datatables

donc j'utilise laravel 5.4 et j'utilise datatables ajax avec mon éloquent est avoir une table de jointure et ainsi de suite, maintenant je veux faire une recherche/filtre ça ne fonctionne tout simplement pas, j'ai eu une erreur de serveur interne 500 une idée pourquoi?

voici mon code contrôleur`

public function index()
    {
        try{
            return view('admins.'.$this->kelaspath.'.index');
        }catch (Exception $e){
            return Redirect::back()->withInput()->with('errormessage',$e->getMessage());
        }
    }

    public function data_kegiatan()
    {
        $data = Kegiatan::with('tempat','sasaranhub.sasaran','prasyarat.kegiatan','total_peserta');
        $datatable = Datatables::of($data)
        ->editColumn('kota', function($data){
            return $data->tempat ? $data->tempat->kota : $data->kota;
        })
        ->editColumn('tempat', function($data){
            return $data->tempat ? $data->tempat->name : '';
        })
        ->editColumn('tanggal', function($data){
            return $data->tanggal ? with(new Date($data->tanggal))->format('d F Y') : '';
        })
        ->editColumn('tanggal2', function($data){
            return $data->tanggal2 ? with(new Date($data->tanggal2))->format('d F Y') : '';
        })
        ->editColumn('status', function($data){
            if($data->status == 1){
                $status = '<a class="btn btn-default btn-sm nopointer"><i class="fa fa-pause"></i> <span class="hidden-xs">MENUNGGU</span></a>';
            }elseif($data->status == 2){
                $status = '<a class="btn btn-warning btn-sm nopointer"><i class="fa fa-circle-o"></i> <span class="hidden-xs">PENDAFTARAN TERBUKA</span></a>';
            }elseif($data->status == 3){
                $status = '<a class="btn btn-warning btn-sm disabled"><i class="fa fa-ban"></i> <span class="hidden-xs">PENDAFTARAN TERTUTUP</span></a>';
            }elseif($data->status == 4){
                $status = '<a class="btn btn-primary btn-sm disabled"><i class="fa fa-dot-circle-o"></i> <span class="hidden-xs">BERJALAN</span></a>';
            }elseif($data->status == 5){
                $status = '<a class="btn btn-primary btn-sm nopointer"><i class="fa fa-times"></i> <span class="hidden-xs">TERLAKSANA</span></a>';
            }elseif($data->status == 6){
                $status = '<a class="btn btn-danger btn-sm nopointer"><i class="fa fa-times"></i> <span class="hidden-xs">BATAL</span></a>';
            }else{
                $status = "-";
            }
            return $status;
        })
        ->editColumn('sasaranhub', function($data){
            $sasaran = '';
            if(!empty($data->sasaranhub)){
                foreach ($data->sasaranhub as $sr) {
                    $sasaran .= '<a class="btn btn-info btn-xs nopointer marginbottom" >' . $sr->sasaran->name . '</a> ';
                }
            }
            return $sasaran;
        })
        ->editColumn('prasyarat', function($data){
            $prasyarat = '';
            if(!empty($data->prasyarat)){
                foreach ($data->prasyarat as $pr) {
                    $prasyarat .= '<a class="btn btn-info btn-xs nopointer marginbottom">' . $pr->kegiatan->kode . ' - ' . $pr->kegiatan->name . '</a> ';
                }
            }
            return $prasyarat;
        })
        ->addColumn('durasi',function($data){
            $mulai = new \Carbon\Carbon($data->tanggal);
            $startTimeStamp = strtotime($mulai->subDays(1));
            $endTimeStamp = strtotime($data->tanggal2);
            $timeDiff = abs($endTimeStamp - $startTimeStamp);
            $numberDays = $timeDiff/86400;
            $numberDays = intval($numberDays);

            return $numberDays;
        })
        ->rawColumns(['sasaranhub', 'prasyarat','status'])->make(true);


        return $datatable;   
    }

et voici ma datatable jquery

var table = $('#dataTables-example').DataTable({
        dom: '<"top"B>t<"bottom"p>',
        processing: true,
        serverSide: true,
        ajax: '{!! route('admins.kegiatan.data_kegiatan') !!}',
        responsive:{
            details:{
                type: 'column',
                target: -1
            }
        },
        columns: [
            { data: 'id', name: 'kegiatan.id', visible : false, searchable : false },
            { data: 'status', name: 'kegiatan.status',visible : false, searchable : false  },
            { data: 'name', name: 'kegiatan.name', className: 'warptext'},
            { data: 'kota', name: 'kegiatan.kota'},
            { data: 'tempat', name: 'kegiatan.tempat',className: 'warptext'},
            { data: 'tanggal', name: 'kegiatan.tanggal'},
            { data: 'tanggal2', name: 'kegiatan.tanggal2' },
            { data: 'durasi', name: 'durasi', render: function(data){
                return data ? data + ' hari' : '-';
            }},

            { data: 'status', name: 'kegiatan.status'},
            { data: 'sasaranhub', name: 'kegiatan.sasaranhub' },
            { data: 'prasyarat', name: 'kegiatan.prasyarat', render:function(data){
                return data ? data : '-';
            } },

            { data: 'min', name: 'kegiatan.min' },
            { data: 'max', name: 'kegiatan.maks' },
            { data: 'max', name: 'kegiatan.terdaftar'},
            { data: null, orderable: 'false', searchable: 'false', className:'control', defaultContent: ''}
        ],
        buttons: [
            {
                extend:'colvis',
                columns: ':gt(1)',
                text: '<i class="fa fa-table"></i>'
            },
            {
                extend:'colvisGroup',
                text: 'Semua',
                hide: [0,1],
                show: ':hidden'
            }
        ],
        language: {
            buttons : {},
            select:{
                rows:{
                    _: "",
                    0: "",
                    1: ""
                }
            },
            "sProcessing":   "Sedang proses...",
            "sLengthMenu":   "Tampilan _MENU_ entri",
            "sZeroRecords":  "Tidak ditemukan data yang sesuai",
            "sInfo":         "Tampilan _START_ sampai _END_ dari _TOTAL_ entri",
            "sInfoEmpty":    "Tampilan 0 hingga 0 dari 0 entri",
            "sInfoFiltered": "(disaring dari _MAX_ entri keseluruhan)",
            "sInfoPostFix":  "",
        }
    });
    $('#searchtext').keyup(function(){
        table.search($(this).val()).draw() ;
    });

et voici aussi mon tableau html

<div class="input-group tabletools">
    <div class="input-group-addon"><i class="fa fa-search"></i></div>
    <input type="text" id="searchtext" class="form-control" placeholder="Kata kunci pencarian...">
</div>
<table class="table table-hover" id="dataTables-example" cellspacing="0" width="100%">
    <thead class="bg-light-blue-active color-palette">
    <tr>
        <th hidden>id</th>
        <th hidden>status</th>
        <th data-priority="1">Nama </th>
        <th>Kota</th>
        <th>Tempat</th>
        <th class="sort" data-priority="4">Mulai</th>
        <th data-priority="3">Selesai</th>
        <th>Durasi</th>
        <th data-priority="2">Status</th>
        <th class="none">Sasaran</th>
        <th class="none">Prasyarat</th>
        <th class="none">Min</th>
        <th class="none">Maks</th>
        <th class="none">Terdaftar</th>
        <th></th>
    </tr>
    </thead>
</table>
question

Tous les 3 commentaires

Le problème est que vous ajoutez des colonnes à la table qui n'existent pas dans la base de données et que vous ne les avez pas marquées searchable: false . Il essaie de rechercher les colonnes qui n'existent pas. Si vous activez le débogage, il aurait dû dire quelque chose de très similaire SQL ERROR: column 'example.durasi' not found (vous pouvez trouver cette réponse dans les outils Web de votre navigateur car elle est appelée via ajax)

oh.. alors comment ajouter interrogeable : faux ? où dois-je ajouter une marque ? Eh bien, je n'utilise jamais de tables de données avec ajax et la plupart du temps, j'utilise simplement des tables de données DOM et la recherche est à peu près correcte avec la même requête / éloquente que là-haut ....

Vous le définiriez dans le javascript, où les colonnes sont définies.

Si vous regardez la dernière colonne définie ici, elle a déjà cette propriété.

{ data: null, orderable: 'false', searchable: 'false', className:'control', defaultContent: ''}

Vous ajouteriez la propriété searchable:false (vous souhaiterez probablement également désactiver le tri) à toutes les colonnes ne figurant pas dans la base de données. Il serait toujours possible de rechercher ces colonnes avec la fonction filter() , mais vous devrez gérer cette logique manuellement.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

macnux picture macnux  ·  3Commentaires

alejandri picture alejandri  ·  3Commentaires

techguydev picture techguydev  ·  3Commentaires

vipin733 picture vipin733  ·  3Commentaires

kamrava picture kamrava  ·  3Commentaires