поэтому у меня есть проблема. Я пытаюсь собрать информацию «Журнала» пользователя («Журнал в этом контексте означает проблему обслуживания или что-то связанное с этим»). Теперь каждая возвращаемая коллекция журналов зависит от типа пользователя. Пользователь также может быть более одного типа, например, арендатор, но также и третье лицо в системе. Поэтому мне нужно вернуть все журналы, даже если они имеют несколько типов пользователей.
Вот мой код:
public function returnLogs() {
if($this->isPosidaciousAdmin()) {
//All logs
return Log::all()->latest();
} else {
//coalesce logs for each user type the user is
if($this->isStaff()) {
//Logs created under working agency ID and log assignee logs
$logs[] = Log::where('agency_id', $this->activeAgencyId())
->orWhere('created_by', $this->user_id)
->latest()
->get();
}
if($this->isThirdParty()) {
//Log Assignees logs
//Get all assigned log IDs
$assignedLogs = LogAssignee::select('log_id')->where('user_id', $this->user_id);
//Find all logs with assigned log IDs
$logs[] = Log::whereIn('log_id', $assignedLogs)->latest()->get();
}
if($this->isTenant()) {
//Logs at current property and logs created by tenant
//If tenant currently has a tenancy
if($this->currentProperty() !== null) {
$logs[] = Log::where('created_by', $this->user_id)
->orWhere('property_id', $this->currentProperty()->property_id)
->latest()
->get();
} else {
$logs[] = null;
}
}
}
return $logs;
}
Проблема с этим заключается в том, что если они имеют более одного пользовательского типа, то выходной массив будет разделен на каждую запись:
=> [
Illuminate\Database\Eloquent\Collection {#829
all: [
App\Log {#830
log_id: 1,
log_title: "Test Log",
log_type: "Maintenance",
log_severity: "Normal",
log_status: "Open",
agency_id: 1,
property_id: 1,
created_by: 4,
created_at: "2018-04-08 19:05:54",
updated_at: "2018-04-08 20:07:48",
deleted_at: null,
},
],
},
Illuminate\Database\Eloquent\Collection {#837
all: [],
},
]
Очевидно, что во второй части массива нет данных, но вы получаете формат, который возвращается. Это вызывает проблемы при зацикливании массива. Мне просто интересно, могу ли я вернуть всю информацию журнала в тот же индекс [0] в массиве? (Тогда я мог бы вернуть $ log [0]).
Спасибо
Вы можете использовать merge()
метод на коллекции.
Попробуйте следующий код, где вы в настоящее время возвращаете журналы;
$mergedLogs = $logs[0];
// although arrays begin at 0 we've already got the first one
for ($i = 1; $i < count($logs); $i++) {
$mergedLogs = $mergedLogs->merge($logs[$i]);
}
return $mergedLogs;
Других решений пока нет …