将结果分块到现有对象
Chunking results onto existing Object
我正面临一个我希望克服的问题。我有一个可以包含许多不同类型数据集的报告。我已经正确设置了所有关系。
在我的 show 函数中,当我需要将此对象传递到前端时,我会这样做
$dataArray = Report::with(['data_set_a', 'data_set_b', 'data_set_c'])
->where('user_id', Auth::user()->id)->where('id', $id)->first();
现在在大多数情况下这都可以完美地工作,数据被传递到前端。但是,对于某些报告,data_set_a
有大约 20k 行。在本地这不是问题,但在我的实时系统上没有任何加载。
我检查了日志,mod_security 说 inbound anomaly score exceeded
。我想它不喜欢数据集很大并且正在阻止它的事实。
因此,我正在考虑使用分块手动添加此数据集。所以我正在尝试这样的事情
$dataArray = Report::with(['data_set_b', 'data_set_c'])
->where('user_id', Auth::user()->id)->where('id', $id)->first();
DataSetA::where('report_id', $report->id)
->chunk(500, function($data) {
foreach ($data as $row) {
$dataArray['data_set_a'] = array(
'cust_id' => $row->cust_id,
'colOne' => $row->colOne,
'colTwo' => $row->colTwo,
'colThree' => $row->colThree
);
);
}
});
但是,我的语法似乎有问题。如何将这些数据从 data_set_a
分块到 dataArray?
谢谢
您需要将 dataArray
导入到您的块函数中,并将每一行附加到数组,而不是覆盖它:
$dataArray['data_set_a'] = [];
DataSetA::where('report_id', $report->id)
->chunk(500, function($data) use ($dataArray) {
foreach ($data as $row) {
$dataArray['data_set_a'][] = array(
'cust_id' => $row->cust_id,
'colOne' => $row->colOne,
'colTwo' => $row->colTwo,
'colThree' => $row->colThree
);
);
}
});
我正面临一个我希望克服的问题。我有一个可以包含许多不同类型数据集的报告。我已经正确设置了所有关系。
在我的 show 函数中,当我需要将此对象传递到前端时,我会这样做
$dataArray = Report::with(['data_set_a', 'data_set_b', 'data_set_c'])
->where('user_id', Auth::user()->id)->where('id', $id)->first();
现在在大多数情况下这都可以完美地工作,数据被传递到前端。但是,对于某些报告,data_set_a
有大约 20k 行。在本地这不是问题,但在我的实时系统上没有任何加载。
我检查了日志,mod_security 说 inbound anomaly score exceeded
。我想它不喜欢数据集很大并且正在阻止它的事实。
因此,我正在考虑使用分块手动添加此数据集。所以我正在尝试这样的事情
$dataArray = Report::with(['data_set_b', 'data_set_c'])
->where('user_id', Auth::user()->id)->where('id', $id)->first();
DataSetA::where('report_id', $report->id)
->chunk(500, function($data) {
foreach ($data as $row) {
$dataArray['data_set_a'] = array(
'cust_id' => $row->cust_id,
'colOne' => $row->colOne,
'colTwo' => $row->colTwo,
'colThree' => $row->colThree
);
);
}
});
但是,我的语法似乎有问题。如何将这些数据从 data_set_a
分块到 dataArray?
谢谢
您需要将 dataArray
导入到您的块函数中,并将每一行附加到数组,而不是覆盖它:
$dataArray['data_set_a'] = [];
DataSetA::where('report_id', $report->id)
->chunk(500, function($data) use ($dataArray) {
foreach ($data as $row) {
$dataArray['data_set_a'][] = array(
'cust_id' => $row->cust_id,
'colOne' => $row->colOne,
'colTwo' => $row->colTwo,
'colThree' => $row->colThree
);
);
}
});