DcatAdmin 在grid里面使用了display方法之后,如何在进行筛选或者排序

根据官方文档,在grid里面可以通过如下方式排序

$grid->user_id->filter(
     Grid\Column\Filter\Equal::make()->valueFilter()
);

如果是user与post一对多的关系
Post model

public function user(){
    return $this->belongsTo(User::class,'uid','id');
}

PostController

 protected function grid()
    {
        return Grid::make(new Post(['user']), function (Grid $grid) {
            $grid->column('user.name','用户')->filter(
            Grid\Column\Filter\Equal::make()->valueFilter()
            );
    });
}

下面的办法,是之前写的,有缺陷的
但是这样写了筛选之后,下面的这个display方法就失效了。

$grid->column('user_id')->display(function($user_id){
    return User::find($user_id)->name;
});
$grid->user_id->filter(
     Grid\Column\Filter\Equal::make()->valueFilter()
);

想请教一下大神,如果这样筛选后,还如何去显示这个$user->name

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
DogLoML
最佳答案

定义user模型关联,然后在new Grid时,with预加载user模型,然后使用user.name即可关联关系《Dcat Admin 中文文档》

如果你在display里面用find user_id的形式,会导致n+1问题,一百行数据查一百多次

4个月前 评论
francisco_v (楼主) 4个月前
讨论数量: 2
DogLoML

定义user模型关联,然后在new Grid时,with预加载user模型,然后使用user.name即可关联关系《Dcat Admin 中文文档》

如果你在display里面用find user_id的形式,会导致n+1问题,一百行数据查一百多次

4个月前 评论
francisco_v (楼主) 4个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!