[ 'number' => 'ТК 465', 'title' => 'Строительство', 'type' => AdvisoryType::COMMITTEE, 'is_main' => true, //'members' => ['import' => 'import/advisories/tk465_members.xlsx'], 'children' => [ 'group1' => [ 'title' => 'Организационно-методические и общетехнические вопросы в строительстве', 'children' => [ 'pk2' => [ 'title' => 'Проектирование. Основные положения нормирования', 'number' => 'ПК 2', 'type' => AdvisoryType::COMMITTEE ], 'pk4' => [ 'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений', 'number' => 'ПК 4', 'type' => AdvisoryType::COMMITTEE ], 'pk6' => [ 'title' => 'Пожаробезопасность в строительстве', 'number' => 'ПК 6', 'type' => AdvisoryType::COMMITTEE ] ] ], 'group2' => [ 'title' => 'Здания и сооружения', 'children' => [ 'pk10' => [ 'title' => 'Жилые, общественные и производственные здания и сооружения', 'number' => 'ПК 2', 'type' => AdvisoryType::COMMITTEE ] ] ], 'group3' => [ 'title' => 'Наружные и внутренние инженерные сети и оборудование', 'children' => [] ], 'group4' => [ 'title' => 'Строительные конструкции и основания', 'children' => [] ] ] ] ]; public function run() { collect($this->advisories)->each(function($data, $name) { $this->importAdvisory($name, $data); }); } public function importAdvisory($name, $data, $parent = null) { $query = $parent ? $parent->children() : Advisory::query(); $advisory = $query->firstOrCreate(['name' => $name]); $advisory->update(collect($data)->except('members', 'children')->all()); $this->importAdvisoryMembers($advisory, $data['members'] ?? []); collect($data['children'] ?? [])->each(function($data, $name) use($advisory) { $this->importAdvisory($name, $data, $advisory); }); } public function importAdvisoryMembers(Advisory $advisory, $data) { if ($path = $data['import'] ?? null) Excel::import(new AdvisoryMembersImport($advisory), Storage::path($path)); } }