Как редактировать столбец в столбце отношений в таблицах данных Laravel Yajra

Я использую 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']);
}

person iizno    schedule 28.12.2019    source источник


Ответы (1)


Хорошо, я обнаружил себя:

Если вы используете -> data () в определении столбца следующим образом:

    Column::make('patient_id')->title('Patient')->data('patient.firstname')->name('patient.firstname'),

Вам нужно использовать то же имя в editColumn, что и в data: -> data (), в некоторых случаях: Patient.firstname

->editColumn('patient.firstname', function ($model) {
    return $model->patient->name;
})
person iizno    schedule 30.12.2019