Laravel 5+, собирая более одного из одной коллекции в массиве

поэтому у меня есть проблема. Я пытаюсь собрать информацию «Журнала» пользователя («Журнал в этом контексте означает проблему обслуживания или что-то связанное с этим»). Теперь каждая возвращаемая коллекция журналов зависит от типа пользователя. Пользователь также может быть более одного типа, например, арендатор, но также и третье лицо в системе. Поэтому мне нужно вернуть все журналы, даже если они имеют несколько типов пользователей.
Вот мой код:

    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]).

Спасибо

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;
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector