Я использую Laravel 6 с Yajra Datatable.
Я создаю «SessionDataTable» в модели сеанса. В этой модели есть отношения с пациентом.
class Session extends Model
{
public function patient()
{
return $this->belongsTo(Patient::class);
}
Вот определение столбца:
protected function getColumns()
{
return [
Column::computed('action')
->exportable(false)
->printable(false)
->width(60)
->addClass('text-center'),
Column::make('id')->title('N°'),
Column::make('protocol_id')->title('Protocole')->data('protocol.name'),
Column::make('patient_id')->title('Patient')->data('patient.firstname')->name('patient.firstname'),
Column::make('room_id')->title('Salle')->data('room.name'),
Column::make('user_id')->title('Planifié par')->data('user.name'),
Column::make('scheduled_at')->title('Planifié le'),
];
}
вот редактирование столбца:
public function dataTable($query)
{
return datatables()
->eloquent($query)
->editColumn('action', function ($model) {
if(!Gate::check('gestion')) {
return '';
}
return view('components.buttons.mini', [
'icon' => 'edit-pencil',
'url' => route($this->route_edit ?: strtolower(class_basename($model)) . '.edit', $model)
]);
})
->editColumn('scheduled_at', function ($model) {
return $model->scheduled_at->format('d/m/Y H:i');
})->editColumn('patient_id', function ($model) {
return $model->patient->name;
})->editColumn('name', function ($model) {
return $model->patient->firstname.' '.$model->patient->lastname;
})->editColumn('user_id', function ($model) {
return $model->user->firstname;
});
}
Проблема в том, что "editColumn ('Patient_id')" игнорируется. У меня есть столбец Patient_id в таблице данных, но он содержит только имя, как определено в определении столбца. EditColumn ('name') полностью игнорируется и не отображается в таблице данных.
Цель состоит в том, чтобы отобразить полное имя пациента в ячейке DT, которая является атрибутом имени модели пациента. Атрибут name не является полем db, это атрибут laravel, который объединяет поля firstname и lastname db
// Model Patient
public function getNameAttribute()
{
return $this->firstname . ' ' .$this->lastname;
}
Я пока даже не прошу поиск или заказ, я могу заказывать и искать только по фамилии, но мне действительно нужно отображать полное имя. Почему игнорируется editColumn?
Вот определение Datatable Query Definition:
/**
* Get query source of dataTable.
*
* @param Session $model
* @return Builder
*/
public function query(Session $model)
{
return $model->newQuery()->with(['patient', 'room', 'user', 'protocol']);
}