【问题标题】:Laravel Datatables: Unable to access changed primary key columnLaravel 数据表:无法访问更改的主键列
【发布时间】:2021-03-09 06:34:57
【问题描述】:

我在laravel yajra datatables 工作,一切正常,但如果我使用我的默认主键列作为id 但出于安全目的,我只是将id 列更改为team_id 并且当 yajra 加载记录时它仍在搜索列id

数据表代码:

protected function getColumns()
{
return [
    Column::make('team_id'),
    Column::make('name')->addClass('text-left'),
    Column::make('logo')->addClass('text-center')->orderable(false),
    Column::make('captain')->addClass('text-right'),
    Column::make('wicketKeeper')->addClass('text-right')->title('Wicket Keeper'),
    Column::make('substitute')->addClass('text-right'),
    Column::make('city_id')->addClass('text-right')->title('City'),
    Column::make('created_at'),
    Column::computed('action')
        ->exportable(false)
        ->printable(false)
        ->width(150)
        ->addClass('text-center'),
];
}

如您所见,我的数据表 getColumns 函数有 team_id 列,即使我也更改了 Team 模型中的主键列

团队模型

protected $primaryKey = 'team_id';

但仍然出现同样的错误:Unknown column teams.id in where clause

谁能告诉我哪里错了?

【问题讨论】:

  • 您是否更改了 $fillable?或这个?受保护的 $primaryKey = 'team_id';另外,你能试试这个吗? Column::make('team_id', function($query) { return $query->('team_id'); }),
  • 是的,我也更改了可填写内容,return $query->('team_id') 给了我错误

标签: laravel yajra-datatable


【解决方案1】:

例如在 Laravel 的控制器中:

public function getMultiFilterSelect()
{
    return view('datatables.eloquent.multi-filter-select');
}
public function getMultiFilterSelectData()
{
    $users = User::select(['team_id', 'name', 'email', 'logo', 'captain', 'wicketKeeper', 'substitute', 'city_id']);
    return Datatables::of($users)->make(true);
}

在 Javascript 代码中:

$('#users-table').DataTable({
    processing: true,
    serverSide: true,
    ajax: 'https://datatables.yajrabox.com/eloquent/multi-filter-select-data',
    columns: [
        {data: 'team_id', name: 'team_id'},
        {data: 'name', name: 'name'},
        {data: 'email', name: 'email'},
        {data: 'logo', name: 'logo'},
        {data: 'captain', name: 'captain'},
        {data: 'wicketKeeper', name: 'wicketKeeper'},
        {data: 'substitute', name: 'substitute'},
        {data: 'city_id', name: 'city_id'}
    ],
    initComplete: function () {
        this.api().columns().every(function () {
            var column = this;
            var input = document.createElement("input");
            $(input).appendTo($(column.footer()).empty())
            .on('change', function () {
                column.search($(this).val(), false, false, true).draw();
            });
        });
    }
});

如果您仍然遇到有关数据表的问题,您可以轻松关注文档https://datatables.yajrabox.com/eloquent/multi-filter-select

【讨论】:

  • 但我正在使用数据表作为服务(数据表类)
  • 你关注过这个文件吗?? datatables.yajrabox.com/service
  • 是的,我跟着,但我的问题是我刚刚将默认主键 id 更改为 team_id
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多