确定多个集合对象的状态



我基本上有一个报告模型。一个报表有一个图表组,而图表组可以有多个图表。我基本上需要知道什么时候可以查看报告,当至少处理了一个图表时,就会出现这种情况。

然后我需要知道报告何时可以下载,也就是报告的所有图表何时已经处理完毕。这是我的基本模式结构,删除了一些列以减少代码。

Schema::create('reports', function (Blueprint $table) {
$table->id();
$table->boolean('isSubmitted')->nullable()->default(false);
$table->boolean('isViewable')->nullable()->default(false);
$table->boolean('reportReady')->nullable()->default(false);
});
Schema::create('chart_group', function (Blueprint $table) {
$table->id();
$table->foreignId('report_id');
$table->foreign('report_id')
->references('id')
->on('reports')
->onDelete('cascade');
});
Schema::create('charts', function (Blueprint $table) {
$table->id();
$table->string('chart_name')->nullable();
$table->boolean('chart_processed')->default(false);
$table->foreignId('chart_group_id');
$table->foreign('chart_group_id')
->references('id')
->on('chart_group')
->onDelete('cascade');
});

然后在Laravel的工作中,我会得到所有的报告并循环它们。然后,我检查图表中的报告,如果尚未处理,我会对其进行处理。如果处理成功,我会更新图表并将其标记为已处理(其他代码(。

foreach ($reports as $report) {
foreach ($report->chartGroup->chart as $chart) {
if (!$chart->report_processed) {
if ($this->queryStatus($chart)) {
if (!$report->isViewable) {
$report->isViewable = true;
$report->saveOrFail();
}
}
}
}
}

因此,到目前为止,如果一个报表有一个需要处理的图表,那么它是经过处理的,并且该图表被标记为这样。我遇到的问题是这样的。一份报告可能有5个图表。我需要一种方法来确定所有图表何时处理完毕,这样我就可以将报告标记为准备就绪。

我该怎么做呢?

感谢

您可以运行另一个作业来识别所有图表都已处理的报告,如下所示。

我在这里所做的只是检查

报表的可用图表计数,然后检查该计数是否匹配到该报表的isViewable真实计数。

这意味着所有图表都已处理完毕。如果这些计数匹配,我将报告添加到空集合中。最后,您可以根据需要处理$reports_to_be_downloaded集合。

$reports_to_be_downloaded = collect();
foreach ($reports as $report) {
if($report->chartGroup->chart->count() == $report->chartGroup->chart()->where('isViewable',true)->count()){
$reports_to_be_downloaded->add($report);
} 
}

相关内容

  • 没有找到相关文章

最新更新