【问题标题】:How to editColumn on a relationship column in Laravel Yajra DataTables如何在 Laravel Yajra 数据表中的关系列上编辑列
【发布时间】:2020-04-17 22:32:31
【问题描述】:

我正在使用带有 Yajra 数据表的 Laravel 6。

我正在会话模型上创建一个“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 Cell 中显示患者全名,这是 Patient Model 的 name 属性。 name 属性不是 db 字段,它是一个 laravel 属性,它连接了 firstname 和 lastname db 字段

 // Model Patient
 public function getNameAttribute()
 {
    return $this->firstname . ' ' .$this->lastname;
 }

我现在什至不要求搜索或订购,我只能按姓氏订购和搜索,但我确实需要显示全名。为什么editColumn被忽略了?

这是数据表查询定义:

/**
 * Get query source of dataTable.
 *
 * @param Session $model
 * @return Builder
 */
public function query(Session $model)
{
    return $model->newQuery()->with(['patient', 'room', 'user', 'protocol']);
}

【问题讨论】:

    标签: php laravel datatables laravel-6 yajra-datatable


    【解决方案1】:

    好的,我找到了自己:

    如果您以这种方式在列定义中使用 ->data() :

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

    您需要在 editColumn 中使用与数据中的名称相同的名称:->data(),在可能的情况下:patent.firstname

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

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2021-01-13
      • 2016-09-13
      • 1970-01-01
      • 2022-10-07
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      相关资源
      最近更新 更多