Laravel-datatables: Pencarian: Mengambil atribut melalui id

Dibuat pada 1 Jun 2016  ·  3Komentar  ·  Sumber: yajra/laravel-datatables

Ringkasan masalah atau permintaan fitur

One-To-Many Relationship ditegaskan melalui penyimpanan id entitas pemilik dalam tabel banyak entitas. Misalnya: koordinator mengelola satu atau banyak pusat. Setelah mengatur kolom melalui pembuat html, saya mengedit kolom coodinator_id dan menerapkan metode pengakses untuk mengambil nama lengkap koordinator:

public function getFullNameAttribute()
{
    return $this->first_name . ", " . $this->last_name;
}

Tujuan saya adalah untuk mengizinkan hanya pusat-pusat milik koordinator yang diautentikasi untuk ditampilkan pada tabel data kecuali pengguna yang diautentikasi adalah admin seperti yang ditunjukkan dalam kueri saya.
Namun, jika saya memasukkan nilai kolom Koordinator yang muncul di tabel data, dikatakan tidak ada catatan yang cocok ditemukan.

Bagaimana saya mencapai ini?

Jelaskan masalah/permintaan fitur Anda di sini.

Cuplikan kode masalah

Jika berlaku, harap sertakan salinan kode Anda yang memicu dugaan bug. Anda dapat menggunakan tag kode php penurunan harga untuk memformat tempel Anda:
<?php

namespace App\DataTables;
use Auth;
use App\Center;
use App\Coordinator;
use Yajra\Datatables\Services\DataTable;

class CentersDataTable extends DataTable
{
    // protected $printPreview  = 'path.to.print.preview.view';

    /**
     * Display ajax response.
     *
     * <strong i="13">@return</strong> \Illuminate\Http\JsonResponse
     */
    public function ajax()
    {
        return $this->datatables
            ->eloquent($this->query())
            ->editColumn('action', function ($center) {
                return '<a href="edit-center/'.$center->id.'" <i class="material-icons sideicons-tables">create</i>'; 
               // <a href="field-technician-delete/'.$user->id.'" <i class="material-icons sideicons-tables">delete</i>
            })
            ->editColumn('coordinator_id', function ($user) {
                return Coordinator::find($user->coordinator_id)->full_name;
                })
            ->editColumn('gps_lat', function ($center) {
                    return $center->gps_location ;
                })
            ->make(true);
    }

    /**
     * Get the query object to be processed by datatables.
     *
     * <strong i="14">@return</strong> \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
     */
    public function query()
    {
        if(Auth::user()->hasRole('admin')){
        $centers = Center::query();
        return $this->applyScopes($centers);
        }
        else{
            $centers = Center::query()->where('coordinator_id',Auth::user()->userable->id);
            return $this->applyScopes($centers);
        }
    }

    /**
     * Optional method if you want to use html builder.
     *
     * <strong i="15">@return</strong> \Yajra\Datatables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
             ->columns([
                'id' => ['title' => 'ID'],
                'center_name' => ['title' => 'Name'], 
                'gps_lat' => ['title' => 'Coordinates'],
                'contact_no' => ['title' => 'Contact Number'],
                'coordinator_id' => [
                            'title' => 'Coordinator',
                            'searchable' => true
                ],
                'created_at' => [ 'title' => 'Created'],
                 'updated_at' => ['title' => 'Updated'], 
                'action' => [
                             'data'           => 'action',
                            'name'           => 'action',
                            'render'         => null,
                            'orderable'      => false,
                            'searchable'     => false,
                            'exportable'     => false,
                            'printable'      => false
                             ]
             ])
             ->parameters([
                 'dom' => 'Bfrtip',
                 'buttons' => ['csv', 'excel', 'print','reload'],
             ]);
    }

    /**
     * Get columns.
     *
     * <strong i="16">@return</strong> array
     */
    private function getColumns()
    {
        return [
            'id',
            // add your columns
            'created_at',
            'updated_at',
        ];
    }

    /**
     * Get filename for export.
     *
     * <strong i="17">@return</strong> string
     */
    protected function filename()
    {
        return 'centers';
    }
}

Detail sistem

  • Sistem Operasi : OS X El Capitan 10.11.5
  • Versi PHP : 7.0.0
  • Versi Laravel : 5.1.36 (LTS)
  • Laravel-Datatables Versi : 6.11.5

Salam,

question

Komentar yang paling membantu

Trik yang dapat Anda lakukan adalah menambahkan kedua kolom di js tetapi keduanya tetap dapat dicari:

'last_name' => [
    'data' => 'coordinator.last_name',
    'visible' => false,
    'name' => 'coordinator.last_name',
],
'coordinator' => [
    'data' => 'coordinator',
    'name' => 'coordinator.first_name',
],

->addColumn('coordinator', function ($user) {
    return Area_Coordinator::find($user->area_coordinator_id)->full_name;
})

Semua 3 komentar

Apakah Anda mencoba mencari nama koordinator? Jika demikian, Anda dapat menggunakan pemuatan yang bersemangat atau bergabung dengan kueri agar berhasil.

Saya mencoba bersemangat memuat, dimodifikasi sesuai tutorial di situs Anda. Namun, sekarang masalah saya adalah saya tidak menyimpan nama lengkap koordinator, melainkan nama depan dan belakang mereka secara terpisah. Yang saya miliki saat ini:
pertanyaan

$centers = Center::query()->with('coordinator')->where('coordinator_id',Auth::user()->userable->id);
            return $this->applyScopes($centers);

kolom

'first_name' => [
                'data' => 'coordinator.first_name',
                'name' => 'coordinator.first_name',
                            'title' => 'Coordinator',
                            'searchable' => true,
                ],

metode edit

->editColumn('first_name', function ($user) {
                return Area_Coordinator::find($user->area_coordinator_id)->full_name;
                })

Saya dapat mencari melalui nama depan koordinator, namun, karena saya ingin mencari berdasarkan itu dan nama belakang apakah ada cara untuk menggabungkan keduanya menjadi satu kolom? Atau lebih tepatnya, terapkan metode pengakses saya, atau haruskah saya memasukkan kolom nama belakang saja di tabel data?

Salam,

Trik yang dapat Anda lakukan adalah menambahkan kedua kolom di js tetapi keduanya tetap dapat dicari:

'last_name' => [
    'data' => 'coordinator.last_name',
    'visible' => false,
    'name' => 'coordinator.last_name',
],
'coordinator' => [
    'data' => 'coordinator',
    'name' => 'coordinator.first_name',
],

->addColumn('coordinator', function ($user) {
    return Area_Coordinator::find($user->area_coordinator_id)->full_name;
})
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

macnux picture macnux  ·  3Komentar

FilipeBorges1993 picture FilipeBorges1993  ·  3Komentar

sangnguyenplus picture sangnguyenplus  ·  3Komentar

jackrsantana picture jackrsantana  ·  3Komentar

jgatringer picture jgatringer  ·  3Komentar