/** * Добавляем в БД всех сотрудников организации * * @param Request $request * @param Organization $organization */ public function pushWorkers(Request $request, Organization $organization) { $workers = []; // создаем метку, которая привязывается ко всем сотрудникам // и сохраняем название организации и едрпоу, на тот случай если они потом изменяться $snapshot = new Snapshot(); $snapshot->name = $organization->fullName; $snapshot->edrpou = $organization->edrpou; $snapshot->date = Carbon::parse($request->get('date')); $snapshot->organization()->associate($organization); $snapshot->save(); $organization->snapshot()->associate($snapshot); $organization->save(); // разделы foreach ($request->get('workers') as $departmentName => $departmentData) { if ($departmentName == 'main') { $departmentName = ''; } if (isset($departmentData['workers'])) { foreach ($departmentData['workers'] as $workerData) { $this->_createWorker($workers, $workerData, $snapshot, $organization, $departmentName); } } // подразделы if (isset($departmentData['sub'])) { foreach ($departmentData['sub'] as $subDepartmentName => $workersData) { foreach ($workersData as $workerData) { $this->_createWorker($workers, $workerData, $snapshot, $organization, $departmentName, $subDepartmentName); } } } } $snapshot->count = count($workers); $snapshot->save(); Worker::insert($workers); // индексуруем работников $newWorkers = Worker::where('snapshot_id', $snapshot->id)->get(); $newWorkers->addToIndex(); }