首页 > 解决方案 > Livewire 数据表 - 转换列和过滤器

问题描述

我正在尝试通过回调替换列数据,该回调必须返回一个用户名,映射到用户唯一标识符。用户名列表在模型数据之外,这就是我被困的地方。我不能将 filterable() 与用户名列表一起使用,因为它将不正确,因为 Eloquent 将无法按用户名过滤 - 只能按用户标识符。

下面代码的最终结果是执行“WHERE users.id = The username for X”而不是“WHERE users.id = X”的查询。

我的模型:

<?php

class User extends Model 
{
    protected $table = 'users';
    protected $fillable = ['id'];

    public static function getNamesProperty()
    {
         return ['Username #1', 'Username #2'];
    }
}


class LogsTable extends LivewireDatatable
{
    public $model      = User::class;
    public $exportable = true;
    public $hideable   = 'select';

    public function builder()
    {
        return User::query();
    }

    public function columns()
    {
        return [
        Column::callback(['id'], function ($id) {
            return "The username for " . $id;
        })->label('Username')->filterOn('users.id')->filterable(User::names()),
         ];
    }

问题是我如何实现目标 - 能够过滤,同时显示用户名而不是标识符?

标签: laravellaravel-livewirelaravel-datatables

解决方案


GitHub上有一个答案:https ://github.com/MedicOneSystems/livewire-datatables/issues/284

谢谢马克!


推荐阅读