Laravel-datatables: 데이터 ν…Œμ΄λΈ” ν•„ν„°κ°€ μž‘λ™ν•˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2017λ…„ 05μ›” 08일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: yajra/laravel-datatables

κ·Έλž˜μ„œ λ‚˜λŠ” laravel 5.4λ₯Ό μ‚¬μš©ν•˜κ³  있고 λ‚΄ μ›…λ³€κ³Ό ν•¨κ»˜ datatables ajaxλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 쑰인 ν…Œμ΄λΈ” 등이 μžˆμŠ΅λ‹ˆλ‹€. 이제 검색/필터링을 ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ‚΄λΆ€ μ„œλ²„ 였λ₯˜ 500이 λ°œμƒν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

μ—¬κΈ° λ‚΄ 컨트둀러 μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€`

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;   
    }

μ—¬κΈ° λ‚΄ 데이터 ν…Œμ΄λΈ” 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() ;
    });

λ˜ν•œ 여기에 λ‚΄ ν…Œμ΄λΈ” 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

λͺ¨λ“  3 λŒ“κΈ€

λ¬Έμ œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν…Œμ΄λΈ”μ— 열을 μΆ”κ°€ν•˜κ³  있고 searchable: false ν‘œμ‹œλ˜μ–΄ μžˆμ§€ μ•Šλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 열을 κ²€μƒ‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 디버깅을 ν™œμ„±ν™”ν•˜λ©΄ SQL ERROR: column 'example.durasi' not found 와 맀우 μœ μ‚¬ν•œ λ‚΄μš©μ΄ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€(이 응닡은 ajaxλ₯Ό 톡해 호좜되기 λ•Œλ¬Έμ— λΈŒλΌμš°μ €μ˜ μ›Ή λ„κ΅¬μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€)

였.. κ·Έλž˜μ„œ searchable을 μΆ”κ°€ν•˜λŠ” 방법: false? λ§ˆν¬λŠ” 어디에 μΆ”κ°€ν•΄μ•Ό ν•˜λ‚˜μš”? κΈ€μŽ„, λ‚˜λŠ” ajax와 ν•¨κ»˜ 데이터 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° λŒ€λΆ€λΆ„μ˜ 경우 DOM 데이터 ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•˜κ³  거기와 같은 λ™μΌν•œ 쿼리/μ›…λ³€μœΌλ‘œ κ½€ 잘 κ²€μƒ‰ν•©λ‹ˆλ‹€....

열이 μ •μ˜λ˜λŠ” μžλ°” μŠ€ν¬λ¦½νŠΈμ—μ„œ μ •μ˜ν•©λ‹ˆλ‹€.

거기에 μ •μ˜λœ λ§ˆμ§€λ§‰ 열을 보면 이미 이 속성이 μžˆμŠ΅λ‹ˆλ‹€.

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

λ°μ΄ν„°λ² μ΄μŠ€μ— μ—†λŠ” 열에 searchable:false (주문을 λΉ„ν™œμ„±ν™”ν•˜κ³  싢을 μˆ˜λ„ 있음) 속성을 μΆ”κ°€ν•©λ‹ˆλ‹€. filter() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 열을 κ²€μƒ‰ν•˜λŠ” 것은 μ—¬μ „νžˆ ​​가λŠ₯ν•˜μ§€λ§Œ ν•΄λ‹Ή 논리λ₯Ό μˆ˜λ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰