在 Dcat Admin 中,如果一个表格是通过 $show->relation 调用的,那么无法正常导出,比如下面的代码在导出的时候会打开一个新的网页,但不会执行导出操作。
protected function detail($id)
{
return Show::make($id, Exam::with(['examinees']), function (Show $show) {
$show->field('title');
$show->relation('考生', function ($model) {
$grid = new Grid(new Examinee());
$grid->model()->where('exam_id', $model->id);
$grid->column('name','性别');
$grid->column('number','准考证号');
$grid->export()//此时无法正常导出
return $grid;
)};
});
}
解决办法是通过自定义页面的方式,将上面的代码修改成下面的方式:
public function show($id,Content $content)
{
return $content->title('考试详情')
->body($this->detail($id))
->body($this->examinees($id));
}
protected function detail($id)
{
return Show::make($id, Exam::with(['examinees']), function (Show $show) {
$show->field('title');
});
}
protected function $examinees($id){
$grid = new Grid(new Examinee());
$grid->model()->where('exam_id', $model->id);
$grid->column('name','性别');
$grid->column('number','准考证号');
$grid->export()//这时就可以正常导出了
return $grid;
}
20240402更新:
如果设置了url,也就是代码中存在:$grid->setResource('exam/appraisees');
,那么以上两种方法都会失效,解决办法是创建自定义的导出方法。