关于DCAT的规格筛选器,在数据源有查询条件的情况下失效的问题?

如果表格里面已经有数据源查询条件,再使用规格筛选器,规格筛选器的筛选失效!

//数据源查询
$grid->model()->where('share',1)->orWhere('lne_id',Employee::where('uid',Admin::user()->id)->get()[0]->id);

//规格筛选器
$grid->selector(function (Grid\Tools\Selector $selector){
  $selector->select('dep_id','所属部门',Department::all()->pluck('name','id'));
  $selector->select('share','是否公开',[0=>'否',1=>'是']);
});

由于设计需要,我需要对数据源进行查询,但是查询之后,再使用规格筛选器就会失去作用。
只有取消数据源查询,规格筛选器会再次生效。
请教各位前辈、高人,是bug还是我哪里出错了!

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

今天抽空测试了一下encore/laravel-admin的数据查询和规格筛选器,测试用的encore/laravel-admin版本为1.8.11,发现数据查询和规格筛选器并不冲突,初步判断可能是dcat/laravel-admin基于的laravel-admin版本问题,我使用的dcat/laravel-admin版本为1.7.6。
继续测试了一下dcat/laravel-admin的最新2.x版本,确实是没有冲突发生。所以最终的解决方式会不会是更新到最新版即可。
然而:
将原平台更新到最新版本发现还是出现问题,问题聚焦到数据查询的语句写法了。

//数据源查询
$grid->model()->where('share',1)->orWhere('lne_id',Employee::where('uid',Admin::user()->id)->get()[0]->id);

上面的orwhere查询语句去掉后就能恢复正常。但如果使用where语句又会恢复。如何解决,如下:

//数据源查询
$grid->model()->where('share',1);
$grid->model()->orWhere('lne_id',Employee::where('uid',Admin::user()->id)->get()[0]->id);

将原来的一句写成两句就可以了。

总结:
请务必将版本更新到最新版,老版本比如1.7.6,还是会冲突,所以建议使用最新的dcat 2.x版,然后将一句变为两句即可解决。但是最终发现这种方法还是有问题,就是筛选器在筛选与数据源查询语句相同内容时还会有冲突,估计需要等待大神门后续的更新了。

3年前 评论
讨论数量: 3

很明显两个条件冲突了,你需要判断一下,如果有规格筛选器筛选的情况下就不要用grid->model()

$grid->model()->when(request(...)function ($q) {
    $q->where('share', 1);
})
3年前 评论

@Jiangqh 主要是系统设计需要,这个是一个文件管理器,里面的需求是:
1、所有用户都可以发布文件,自己只能看到自己的和别人公开的文件。那么我就需要先进行数据源查询。
2、因为文件会随着使用增加而变得庞大,那么就需要有规格筛选器。
请问有其他方式可以处理么?

3年前 评论

今天抽空测试了一下encore/laravel-admin的数据查询和规格筛选器,测试用的encore/laravel-admin版本为1.8.11,发现数据查询和规格筛选器并不冲突,初步判断可能是dcat/laravel-admin基于的laravel-admin版本问题,我使用的dcat/laravel-admin版本为1.7.6。
继续测试了一下dcat/laravel-admin的最新2.x版本,确实是没有冲突发生。所以最终的解决方式会不会是更新到最新版即可。
然而:
将原平台更新到最新版本发现还是出现问题,问题聚焦到数据查询的语句写法了。

//数据源查询
$grid->model()->where('share',1)->orWhere('lne_id',Employee::where('uid',Admin::user()->id)->get()[0]->id);

上面的orwhere查询语句去掉后就能恢复正常。但如果使用where语句又会恢复。如何解决,如下:

//数据源查询
$grid->model()->where('share',1);
$grid->model()->orWhere('lne_id',Employee::where('uid',Admin::user()->id)->get()[0]->id);

将原来的一句写成两句就可以了。

总结:
请务必将版本更新到最新版,老版本比如1.7.6,还是会冲突,所以建议使用最新的dcat 2.x版,然后将一句变为两句即可解决。但是最终发现这种方法还是有问题,就是筛选器在筛选与数据源查询语句相同内容时还会有冲突,估计需要等待大神门后续的更新了。

3年前 评论

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