我正在尝试通过回调替换列数据,该回调必须返回一个用户名,映射到用户唯一标识符。用户名列表在模型数据之外,这就是我被困的地方。我不能将 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()),
];
}
问题是我如何实现目标 - 能够过滤,同时显示用户名而不是标识符?