Создание копий коллекций LaravelPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Создание копий коллекций Laravel

Сообщение Anonymous »

Я пытаюсь передать копию коллекции пользователей красноречивой модели заданий. Таким образом, я бы фактически сделал следующее:

Код: Выделить всё

jobs : [
1 : {
users : {
1: {}
2: {}
3: {}
}
}
2 : {
users : {
1: {}
2: {}
3: {}
}
}
]
Как только я это получу, я собираюсь просуммировать некоторые числа из другого запроса, чтобы получить итоговую сумму для каждого пользователя по каждому заданию, поэтому приведенное выше может выглядеть следующим образом:

Код: Выделить всё

jobs : [
1 : {
users : {
1: {
total: 120
}
2: {
total: 45
}
3: {
total: 12
}
}
}
2 : {
users : {
1: {
total: 32
}
2: {
total: 4
}
3: {
total: 17
}
}
}
]
За исключением того, что я не могу клонировать этот список пользователей, и в итоге все итоговые значения совпадают:

Код: Выделить всё

{
1:{
id:1,
users:{
1:{
id:1,
total:807
},
2:{
id:2,
total:9
}
}
},
2:{
id:2,
users:{
1:{
id:1,
total:807
},
2:{
id:2,
total:9
}
}
},
3:{
id:3,
users:{
1:{
id:1,
total:807
},
2:{
id:2,
total:9
}
}
}
}
Вот что я делаю:

Код: Выделить всё

public function summary()
{
$jobs = Job::all()->keyBy('id');
$users = User::with('closed_time_chunks')->get();

$users_list = User::all(['id'])->keyBy('id');

// I think this is the problem statement:
foreach ($jobs as $job):
$job->users = clone $users_list;
endforeach;

Log::info('Starting');

foreach ($users as $user):
foreach ($user->closed_time_chunks as $chunk):

Log::info('Adding ' . ($chunk->stop_time - $chunk->start_time) . ' to job: ' . $chunk->job_id);
$jobs[$chunk->job_id]->users[$chunk->user_id]['total'] += $chunk->stop_time - $chunk->start_time;

endforeach;
endforeach;
}
Я предполагаю, что на самом деле я просто создаю ссылку на одну и ту же вещь, и любое дополнение на самом деле просто добавляется к «основной» коллекции. Как я могу успешно клонировать пользователей, чтобы итоговые значения были уникальными для всех заданий?
Изменить
Использование массива (как рекомендует Matheos) приводит к очень странной ошибке:

ErrorException (E_NOTICE)
Непрямое изменение перегруженного свойства Job::$users не имеет никакого эффекта
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»