如何解决Laravel Spatie Query Builder - 加入时查询错误
我对 spatie/Laravel-query-builder 包有问题。我使用这个包来简单地过滤和排序我的查询,但它不是那样的 :D
我试图过滤具有两种关系的结果 - 商店和员工。简而言之,它要过滤商店报告列表
看,这是我的代码。当我使用 join 方法时,作为响应接收到 ID 不正确的数据。当评论加入方法时一切正常,但我需要按关系排序。
return ReportControlResource::collection(
QueryBuilder::for(Report::class)
->with(['employee','shop'])
->allowedFilters('shop.name','employee.name')
->join('employees','employees.id','=','reports.employee_id')
->join('shops','shops.id','reports.shop_id')
->allowedSorts(['employees.name'])
->get()
);
我在报表模型中的关系:
public function shop(): BelongsTo
{
return $this->belongsTo(Shop::class);
}
public function employee(): BelongsTo
{
return $this->belongsTo(Employee::class);
}
Shop 模型中的关系:
public function reports()
{
return $this->hasMany(Report::class);
}
在员工模型中
public function reports()
{
return $this->hasMany(Report::class);
}
你有什么想法吗?
我注意到 ID 被覆盖了,但不是 shop_id 和 employee_id,但是 ID 为什么??
我认为问题在于图书馆本身。创作者没有像我的情况那样考虑加入表格的相反情况。
看看文档中的例子:
$addRelationConstraint = false;
QueryBuilder::for(User::class)
->join('posts','posts.user_id','users.id')
->allowedFilters(AllowedFilter::exact('posts.title',null,$addRelationConstraint));
还有我的加入
->join('employees','reports.employee_id')
但是这个连接是这样工作的
->join('employees','reports.id','reports.employee_id')
但是为什么呢?我查了好多种顺序,连过滤都断开了,也没啥变化
解决方法
我找到了问题的解决方案。我必须选择一列,现在一切正常:-)
return EvidenceControlResource::collection(
QueryBuilder::for(EvidenceControl::class)
->allowedIncludes('employee','shop')
->select('evidence_controls.*',DB::raw('employees.id as employee_id'))
->join('employees','evidence_controls.employee_id','=','employees.id')
->select('evidence_controls.*',DB::raw('shops.id as shop_id'))
->join('shops','evidence_controls.shop_id','shops.id')
->allowedFilters('shop.name','employee.name')
->allowedSorts(['employees.name','shops.name'])
->get()
);
这不是干净的代码,但是当使用实现 Sort 创建自己的类时,代码可能看起来好多了。
感谢盖伊的帮助!祝你好运! :-)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。