Все мои департаменты должны представлять различные отчеты каждый квартал: бюджет, отдел кадров и т. Д. c. Я хочу показать таблицу, в которой показаны все необходимые отчеты для отдела вошедшего в систему пользователя (все отделы должны представлять одинаковые отчеты), логическое значение, если они его отправили, и логическое значение, если этот файл считается действительным. У меня проблемы в основном с логическими значениями.
У меня есть три таблицы: reports
хранит id
, name
и due_date
; file_uploads
хранит id
, report_id
, filename
и department_id
; file_upload_errors
хранит id
, file_upload_id
и error
.
Чтобы создать таблицу для отображения пользователю, я запросил таблицу отчетов:
$data = Reports::with([
'file_uploads' => function ($query) {
$query->where('department_id', '=', user()->department_id);
},
'file_uploads.file_upload_errors'
])->get();
Далее мне нужно сопоставить данные с моделью моего вида:
$vm = array();
//map the data to the view model
foreach ($data as $value) {
$mapping = new DataRequestsViewModel();
$mapping->ReportName = $value->name;
$mapping->DueDate = $value->due_date;
$mapping->IsUploaded = ($value->file_uploads->count() > 0) ? true : false;
$mapping->IsValid = ($value->file_uploads->file_upload_errors->count() < 1) ? true : false;
$vm[] = $mapping;
}
Однако я получаю исключение: Property [file_upload_errors] does not exist on this collection instance.
Я понимаю, что это потому, что если пользователь еще не загрузил файл, поэтому он не может запросить отношение null
, чтобы увидеть, есть ли какие-либо file_upload_errors
, но я не знаю, как с этим справиться ... Может кто-нибудь показать мне хороший подход?
На самом деле я не использовал empty()
, когда все сказано и сделано, но это действительно привело меня на правильный путь ... вот что я закончил:
foreach ($data as $value) {
$mapping = new DataRequestsViewModel();
$mapping->TemplateId = $value->id;
$mapping->TemplateName = $value->name;
$mapping->DueDate = $value->due_date;
$mapping->IsUploaded = ($value->file_uploads->count() > 0) ? true : false;
if ($mapping->IsUploaded == false) {
$mapping->IsValid = false;
} else {
$mapping->IsValid = $value->file_uploads->first()->file_upload_errors->count() < 1 ? true : false;
}
$vm[] = $mapping;
}