#laravel #laravel-5 #eloquent
#laravel #laravel-5 #красноречивый
Вопрос:
По сути, у меня есть модель отчета. Отчет имеет одну группу диаграмм, а в группе диаграмм может быть много диаграмм. По сути, мне нужно знать, когда отчет готов к просмотру, и это может произойти, когда хотя бы одна диаграмма была обработана.
Затем мне нужно знать, когда отчет готов к загрузке, и это когда все диаграммы для отчета были обработаны. Это моя базовая структура схемы с некоторыми столбцами, удаленными для сокращения кода.
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 диаграмм. Мне нужен способ определить, когда все диаграммы были обработаны, чтобы я мог пометить отчет как готовый.
Как я мог это сделать?
Спасибо
Ответ №1:
Ну, вы можете запустить другое задание для определения отчетов, в которых все диаграммы были обработаны, как показано ниже.
Что я здесь делаю, так это просто проверяю
доступное количество диаграмм для отчета, а затем проверьте, совпадает ли это количество с отображаемым истинным количеством для этого отчета.
Это означает, что все диаграммы были обработаны.Если эти подсчеты совпадают, я добавляю отчет в пустую коллекцию. Наконец, вы можете обрабатывать $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);
}
}