Поскольку на самом деле у вас нет массива объектов , а вместо этого массив пар key => value , когда вы делаете
$all_calls->calls[] = [
'employee_id' => $employee_id,
'call_duration' => $value->duration
];
вы, конечно, не сможете получить доступ к членам как к объектам.
Вы можете привести массив key => value к объекту при его извлечении, но это более правильно, особенно если вы хотите, чтобы вся структура объекта выглядела как ваш пример заключается в добавлении экземпляров stdClass вместо парных массивов key => value в массив $calls
с самого начала. В противном случае ваш объект будет по-прежнему содержать массивы пар key => value , которые вы просто разыгрываете, когда хотите их использовать.
Вы могли бы сделать что-то вроде
$c = new stdClass();
$c->employee_id = 10;
$c->call_duration = 60;
$obj->calls[] = $c
Но чтобы сделать его немного более компактным и не набирать столько текста, вы могли бы сделать что-то вроде.
$obj->calls[] = (object)['employee_id' => 10, 'call_duration' => 42];
Это сделает вашу переменную-член $calls
содержащей экземпляры объекта stdClass , члены которого могут быть доступны с помощью -> .
Можно также сделать то же самое, имея исходные данные в формате json и выполнив jsondecode
, аналогично
$obj->calls[] = json_decode('{ "employee_id ": 10, "call_duration": 60 }');
Но другое решение мне немного яснее.