php - 为什么当我将 get() 方法查询结果传递给 laravel 分形 Transformer 时会创建大量查询?
问题描述
嗨朋友们,我正在使用“spatie/laravel-fractal”包。
实际上我无法理解这是一个问题还是只是分形的工作方式,但是当我在另一个中包含一个分形转换器时,我会为第一个转换器的每个结果获得一个新查询。换句话说,如果我列出“Shifts”并在 with() 方法中传递“Jobs”,对于每个“Shift”,我将有一个查询来获取工作。
ShiftController(这里的方法)
public function list(Request $request)
{
$shiftData = Shift::with(['job'])
->withCount('job_applications')->active()
->orderBy('start_date_time', 'asc')->get();
$resource = new Collection($shiftData, new ShiftTransformer());
$array = $this->fractal->createData($resource)->toArray();
$array['count'] = count($array['data']);
return $this->respondWithCode($array, Illuminate::HTTP_OK);
}
换档变压器
class ShiftTransformer extends TransformerAbstract
{
protected $availableIncludes = [
'roles', 'notifications', 'permissions'
];
public function transform(shift $shift)
{
$job_sub_title = is_null($shift->job_sub_title) ? $shift->job->title : $shift->job->title . ' - ' . $shift->job_sub_title;
return [
'id' => (string)$shift->id,
'title' => $job_sub_title,
];
}
}
班次表与作业表的关系
班次模型
public function job()
{
return $this->belongsToMany('App\Models\Job', 'job_shift', 'shift_id', 'job_id');
}
工作模式
public function shifts()
{
return $this->belongsToMany('App\Models\Shift', 'job_shift');
}
多个查询
为什么我会收到很多如下查询,因为在 Transformer 类中我没有执行任何查询
选择shifts
。, (select count( ) from job_applications
where shifts
. id
= job_applications
. shift_id
and job_applications
. deleted_at
is null) as job_applications_count
from shifts
where exists (select * from jobs
inner join job_shift
on jobs
. id
= job_shift
. job_id
where shifts
. id
= job_shift
. shift_id
and is_active
= 1 and jobs
. deleted_at
is null) and exists (select * from jobs
inner join job_shift
on jobs
. id
= job_shift
. job_id
where shifts
. id
= job_shift
. shift_id
and 存在(select * from clients
where jobs
. client_id
= clients
. id
and id
in (6, 3) and clients
. deleted_at
is null)和jobs
. deleted_at
为空) 和 max_staffs != approved_staffs 和shifts
. 按asc [] []deleted_at
为空顺序start_date_time
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。在 (6, 7, 8, 9, 26, 29, 30, 31, 32, 33, 34, 35, 51, 52, 53, 54, 55, 56, 57, 64, 247, 251, 255, 256, 257、258、259、263、264、266、267、354、369、380、381、382、383、453、454、455、456、457、466、468、474、479、536、540)和 一片空白 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 64 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 31 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 32 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 35 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 57 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 53 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 34 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 56 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 54 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 55 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 33 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 52 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 251 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 266 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 264 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 267 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 257 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 258 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 255 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 256 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 263 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 259 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 354 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 382 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 383 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 380 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 369 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 455 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 456 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 51 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 247 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 381 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 466 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 468 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 479 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 474 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 26 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 30 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 29 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 9 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 454 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 457 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 453 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 536 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 540 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 7 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 6 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
选择jobs
.*, job_shift
. shift_id
如pivot_shift_id
, job_shift
. job_id
从内部连接pivot_job_id
开始。= 。哪里。= 8 和. 为空限制 1 [] []jobs
job_shift
jobs
id
job_shift
job_id
job_shift
shift_id
jobs
deleted_at
解决方案
这可能不是正确的解决方案,但尝试在 AppServiceProvider 的启动功能中添加 Model::preventlazyloading()
推荐阅读
- .htaccess - Create new .htaccess file to deny
- javascript - 数组问题 - 将值转移到另一个数组
- laravel - 将购物车从客人转移到登录用户?
- google-calendar-api - Google 事件监听器
- ansible - 如何参考字典?Ansible 中的项目
- firebase - Firestore 安全规则嵌套集合组查询
- python - 通过 PYODBC 迭代 SQL 查询并将结果收集到 Pandas DF
- python - 如何使用我的 Python 程序制作 macOS 应用程序?
- javascript - Javascript 正则表达式忽略连字符
- c - 导入 C 函数