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.<?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';
}
}
Salam,
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;
})
Komentar yang paling membantu
Trik yang dapat Anda lakukan adalah menambahkan kedua kolom di js tetapi keduanya tetap dapat dicari: