Laravel-datatables: Fungsi pencarian cepat yajra Datatables tidak mencari

Dibuat pada 7 Jun 2016  ·  17Komentar  ·  Sumber: yajra/laravel-datatables

Selamat siang!

Saya mengalami masalah dengan pencarian catatan di tabel data saya. Hanya kolom tracking_id yang bisa dicari. Saya membutuhkan semua kolom untuk dicari.

Berikut adalah kode php kueri saya:

$result = Document::join('user','document.user_id','=','user.id')
->join('classification','document.classification_id','=','classification.id')
->select('document.id',DB::raw('CONCAT(document.tracking_type,"-",document.tracking_date,"-",document.tracking_seq_no) AS tracking_id'),'document.date_prepared','document.subject','classification.description as doc_class')
->orderBy('document.created_at','desc')->get();

return Datatables::collection($result)
->addColumn('check',function($record){
    return '<input type="checkbox" name="check['.$record->id.']" class="checkboxes" value='.$record->id.'>';})
->addColumn('action',function($record){
    return '<a href="/records/view/' . $record->tracking_id . '">View Record</a></a>';})
->addColumn('document.tracking_id',function($record){
    return $record->tracking_id;})
->editColumn('document.doc_class',function($record){
    return $record->doc_class;})
->addColumn('document.subject',function($record){
    return $record->subject;})
->addColumn('document.date_prepared',function($record){
    return date('F d, Y', strtotime($record->date_prepared));})
->make(true);

Deklarasi JS:

docstable = $('.docstable').DataTable({
    processing: true,
    serverSide: true,
    ajax: "/ajax/docrec"
    columnDefs: [
        {targets:[0,1], orderable:false}
    ],
    columns: [
        {data:'check'},
        {data:'action'},
        {data:'tracking_id',name:'document.tracking_id'},
        {data:'doc_class',name:'document.doc_class'},
        {data:'subject',name:'document.subject'},
        {data:'date_prepared',name:'document.date_prepared'}
    ]
});

Apakah ada cara seperti Bllim Datatables yang dapat mencari semua kolom tertentu dengan menggunakan searchColumns () dalam kode php? Terima kasih

question

Komentar yang paling membantu

Hai @ChaosPower dan terima kasih banyak atas jawaban Anda.

Saya mencoba solusi Anda tetapi tidak berhasil. Sebenarnya $this->mainRepo->model adalah contoh model saya, dari App \ Model. Itu terikat ke barang mainRepo tetapi tidak terkait dengan masalah saya.
Saya memperbarui untuk memiliki sesuatu seperti ini (dari repositori saya):
$query = $this->model->with($with);
$dataTable ?: $query->orderBy($orderBy, $sort);
return !$dataTable ? $query->get($columns) : $query->select($columns);

Saya menggunakan metode ini untuk mengelola semua data Tabel Data dari model saya. Jika variabel dataTable salah, tidak ada pengurutan yang diterapkan, dan saya menggunakan select('*') .

Pada akhirnya, metode rantai akan terlihat seperti:
$this->model->with('relation')->select('*'); dimana $this->model adalah App\Models\User .

Urutan kolom sekarang bekerja dengan sempurna, tetapi pencarian teks default masih tidak berpengaruh pada pencarian. Semua hasil ditampilkan tidak tergantung masukan saya.
Apakah saya melakukan kesalahan lagi?

Di sini kita melihat input pencarian saya, tetapi semua dari 3 pengguna saya dikembalikan, bahkan jika input 'nilai pencarian saya' seharusnya tidak menghasilkan apa-apa.
capture

Terima kasih banyak atas bantuan Anda

Semua 17 komentar

Pencarian cepat di semua kolom didukung secara default tetapi karena Anda menggunakan kueri gabungan, ada beberapa perubahan tentang bagaimana Anda harus mendeklarasikan nama pada skrip Anda seperti pada demo ini.

BTW, mengapa menggunakan collection, bukan fasih? Saya sarankan Anda menghapus get() pada kueri Anda dan menggunakan return Datatables::eloquent($result) sebagai gantinya?

Halo!
Bagi saya, pencarian global selalu memberikan hasil yang kosong. Dataable saya kosong setelah pencarian. Terisi dengan semua data ketika saya menghapus semua input pencarian.
Tetapi saya melakukannya sesederhana:
$users = $this->mainRepo->model->get(); return Datatables::of($users)->make(true);

Saya dapat melihat di permintaan HTTP input pencarian saya, tetapi hasil baris selalu kosong. Apakah saya perlu melakukan sesuatu di sisi server untuk mengizinkan opsi pencarian global? Saya pikir itu otomatis ...
capture

Data berasal dari Repositori saya dengan pada dasarnya melakukan $ model-> get () tanpa ada pemesanan / penyortiran. Saya pikir itu cukup untuk membuat beberapa pemfilteran teks kolom dan global. Tetapi apakah saya perlu menerapkan solusi untuk menggunakan 'di mana' dalam permintaan Eloquent saya? Atau lebih baik memfilter menggunakan metode filter DataTables? (Jika tidak ada yang otomatis, dan saya perlu melakukan semua sisi server).

Tetapi contoh ini dan yang ini tidak menerapkan pemrosesan sisi server apa pun, dan mendapatkan pencarian global, bahkan untuk pencarian per kolom ... Saya mencoba semua contoh itu, namun tidak berhasil: hasil pencarian selalu kosong, datatable kosong pada karakter pencarian pertama submit, dan kembali diisi dengan semua data bila tidak ada filter sama sekali yang diisi ...

Pertanyaan dasarnya adalah: Apakah ada yang diimplementasikan dalam paket untuk pemfilteran / penelusuran sisi server dari Model Datas, atau apakah hanya ada penyortiran & penomoran kolom yang tersedia?

Terima kasih banyak atas bacaan Anda, dan bantuan Anda!

PS: ditautkan ke komentar # 562 saya

@ mtx-z saat Anda memanggil -> get () Anda menggunakan koleksi, bukan objek LDT.

$users = User::select(['id', 'name', 'email', 'password', 'created_at', 'updated_at']); //Eloquent Object

$users->all(); // Collection

Laravel Datatables secara otomatis melakukan -> get () dan saya menyarankan Anda untuk tidak menggunakan -> get () saat Anda

return Datatables::of($users)->make(true);

Berdasarkan contoh Anda, Anda tidak perlu -> get ()


$users = $this->mainRepo->model->get(); return Datatables::of($users)->make(true);

hanya


$users = $this->mainRepo->model; return Datatables::of($users)->make(true);

Untuk pertanyaan utama Anda tentang pemfilteran dan pencarian. Laravel Datatables sudah mengimplementasikan pencarian ke semua kolom secara default / pemrosesan sisi server. Dan juga mendukung pemfilteran kolom individual.

https://datatables.yajrabox.com/eloquent/basic - lihat tajuk yang dikirimkan
https://datatables.yajrabox.com/eloquent/multi-filter-select - lihat tajuk yang dikirimkan

Hai @ChaosPower dan terima kasih banyak atas jawaban Anda.

Saya mencoba solusi Anda tetapi tidak berhasil. Sebenarnya $this->mainRepo->model adalah contoh model saya, dari App \ Model. Itu terikat ke barang mainRepo tetapi tidak terkait dengan masalah saya.
Saya memperbarui untuk memiliki sesuatu seperti ini (dari repositori saya):
$query = $this->model->with($with);
$dataTable ?: $query->orderBy($orderBy, $sort);
return !$dataTable ? $query->get($columns) : $query->select($columns);

Saya menggunakan metode ini untuk mengelola semua data Tabel Data dari model saya. Jika variabel dataTable salah, tidak ada pengurutan yang diterapkan, dan saya menggunakan select('*') .

Pada akhirnya, metode rantai akan terlihat seperti:
$this->model->with('relation')->select('*'); dimana $this->model adalah App\Models\User .

Urutan kolom sekarang bekerja dengan sempurna, tetapi pencarian teks default masih tidak berpengaruh pada pencarian. Semua hasil ditampilkan tidak tergantung masukan saya.
Apakah saya melakukan kesalahan lagi?

Di sini kita melihat input pencarian saya, tetapi semua dari 3 pengguna saya dikembalikan, bahkan jika input 'nilai pencarian saya' seharusnya tidak menghasilkan apa-apa.
capture

Terima kasih banyak atas bantuan Anda

Saya akhirnya melakukannya :) ty

Saya juga tiba-tiba tidak bisa mencari relasi, saya menggunakan $ this-> model-> with ('relation') -> select ('*');
mtx-z dapatkah Anda membagikan solusinya?

Hei. Kode yang saya gunakan khusus untuk saya.
Model ini-> berisi contoh model saya.

Bisakah Anda memberikan kode Anda?

\\ In controller
$result = MsCustomer::with('company')->select('ms_customers.*');
return Datatables::of($result)->make(true);

\\ In view
$('#data-table').DataTable({
    ajax: '{!! route('master.customer.data') !!}',
    columns: [
        { data: 'id', name: 'id' },
        { data: 'code', name: 'code' },
        { data: 'name', name: 'name' },
        { data: 'email', name: 'email' },
        { data: 'company.name', name: 'company.name' },
   ]
});

Data yang dijalankan dan ditampilkan menyertakan relasi company.name , tetapi tidak dapat mencari relasinya. Saya kira, kodenya sudah mirip seperti demo ini

Saya memiliki model MsCustomer dengan menyatakan dilindungi $ table = 'ms_customers', juga hubungan 'perusahaan' di dalam model MsCustomer. Kemudian model MsCompany dengan nama tabel 'ms_companies'.

Saya bisa mencari id, kode, nama, dan email, tapi tidak bisa mencari relasi 'company.name'. Ada yang salah dengan kode di atas?

Saya memiliki masalah yang sama dengan @maengkom , tabel saya dimuat dengan baik. tetapi ketika saya mencari hasilnya selalu kosong

di Controller

$agenda = AgendaMasuk::with('surat')
            ->whereNotNull('surat_id')->where('group_id', $group->id)
            ->select('agenda_masuks.*');
        return Datatables::of($agenda)->make(true);

dalam penglihatan

var table = $('#surats').DataTable({
        "jQueryUI"   : true,
        "paging"     : true,
        "lengthMenu" : [ 5, 10, 25, 50, 75, 100, "All" ],
        "autoWidth"  : false,
        "stateSave"  : false,
        "order"      : [[ 0, 'asc' ]],
        "processing" : true,
        "scrollX"    : true,
        "serverSide" : true,
        "ajax": {
            "url": $('#surats').data('url'),
            "type": "POST"
        },
        "columns": [
            {
                className: 'text-center',
                data: 'no_agenda',
                name: 'agenda_masuks.no_agenda'
            },
            {
                className: 'text-center',
                data: 'surat.no_surat',
                name: 'surat.no_surat'
            },
            {
                className: 'text-center',
                data: 'tanggal',
                name: 'agenda_masuks.tanggal'
            },
            {
                data: 'surat.sifat',
                name: 'surat.sifat',
                sortable: false
            },
            {
                data: 'surat.pengirim',
                name: 'surat.pengirim'
            },
            {
                data: 'surat.tujuan',
                name: 'surat.tujuan'
            },
            {
                data: 'surat.ringkasan',
                name: 'surat.ringkasan',
                sortable: false
            },
            {
                data: null,
                defaultContent: '-',
                name: 'disposisi',
                searchable: false,
                sortable: false
            },
            {
                data: null,
                defaultContent: '-',
                name: 'file',
                searchable: false,
                sortable: false
            }
        ]
    });

@maengkom Saya memiliki masalah yang sama, saya tidak dapat menggunakan pencarian global pada nilai objek DAN nilai relasi (hanya id).
Misalnya, semua model saya memiliki "model_jemahan" yang terkait. Yang berisi teks publik dan hanya itu. Nah, data saya tidak dapat secara otomatis mencari nama terjemahan.

Untuk memperbaikinya, saya mengedit panggilan ajax untuk menambahkan beberapa parameter (pencarian teks, pilih nilai ...) dan saya menggunakan nilai ini untuk memfilter kueri yang fasih sebelum mengirimnya ke Datatable.
Dari sini, Anda dapat memfilter apa pun (untuk kasus sebenarnya, ini adalah "di mana" dengan "sedangkan terjemahan" di mana "terjemahan.name = 'search_value'" karena fasih.

@nsetyo sudahkah Anda memeriksa koleksi yang dikembalikan? Apakah data dalam koleksi sesuai dengan kebutuhan dataTable?

@ mtx-z ya. Saya memperbaiki sementara ini dengan menggunakan kueri bergabung sebagai gantinya

@nsetyo @ mtx-z pemilik sudah mengkonfirmasi bahwa relasi pencarian masih memiliki bug. lihat ini https://github.com/yajra/laravel-datatables/issues/698

Saya mencoba bantuan untuk memperbaikinya dan masih mempelajari kode dalam metode pemfilteran di dalam paket tetapi masih bingung di mana harus diperbaiki

Semua bidang pencarian saya berfungsi sekarang tetapi saya memiliki 1 masalah tersisa. Berdasarkan demo yang diberikan oleh yajra (Pemilik), terdapat field Dibuat Di & Diperbarui Di pada tabel. Saya juga memiliki bidang di tabel saya yang menampilkan tanggal dan waktu tetapi masalahnya, jika saya memformat tanggal dan waktu yang ditampilkan menjadi lebih mudah dibaca oleh pengguna, datatable tidak dapat mencari tanggal dan waktu yang baru diformat.

Contoh: (Format Tanggal dan Waktu Default ditampilkan)
2016-08-23 14:37:25

Saya memformatnya menjadi:
23 AGUSTUS 2016 14.37.25

menggunakan date('F d, Y h:i:s a',strtotime($the_given_date_and_time));

Setelah memformat, datatable tidak dapat mencari bidang itu

Anda dapat menggunakan filterColumn api untuk menimpa sql default untuk mencari di kolom tanggal agar sesuai dengan apa yang ditampilkan.

Untuk addcolumn, itu harus dicari.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat