[ '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 ], 'pk3' => [ 'title' => 'Строительство. Основные положения нормирования', 'number' => 'ПК 3', 'type' => AdvisoryType::COMMITTEE ], 'pk4' => [ 'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений', 'number' => 'ПК 4', 'type' => AdvisoryType::COMMITTEE, 'children' => [ 'rg4.1' => [ 'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений', 'number' => 'РГ 4.1', 'type' => AdvisoryType::WORKGROUP ] ] ], 'pk6' => [ 'title' => 'Пожаробезопасность в строительстве', 'number' => 'ПК 6', 'type' => AdvisoryType::COMMITTEE ], 'pk7' => [ 'title' => 'Сейсмобезопасность в строительстве', 'number' => 'ПК 7', 'type' => AdvisoryType::COMMITTEE ], 'pk8.1' => [ 'title' => 'Энергосбережение в зданиях', 'number' => 'ПК 8.1', 'type' => AdvisoryType::COMMITTEE ], 'pk8.2' => [ 'title' => 'Строительная физика', 'number' => 'ПК 8.2', 'type' => AdvisoryType::COMMITTEE ] ] ], 'group2' => [ 'title' => 'Здания и сооружения', 'children' => [ 'pk10' => [ 'title' => 'Жилые, общественные и производственные здания и сооружения', 'number' => 'ПК 10', 'type' => AdvisoryType::COMMITTEE ], 'pk11' => [ 'title' => 'Проектирование и строительство транспортных сооружений', 'number' => 'ПК 11', 'type' => AdvisoryType::COMMITTEE ], 'pk12' => [ 'title' => 'Проектирование и строительство гидротехнических и мелиоративных сооружений', 'number' => 'ПК 12', 'type' => AdvisoryType::COMMITTEE ], 'pk13' => [ 'title' => 'Проектирование и строительство магистральных и промысловых трубопроводов, хранилищ нефти и газа', 'number' => 'ПК 13', 'type' => AdvisoryType::COMMITTEE ] ] ], 'group3' => [ 'title' => 'Наружные и внутренние инженерные сети и оборудование', 'children' => [ 'pk14' => [ 'title' => 'Проектирование и строительство сетей теплоснабжения, отопления и вентиляции', 'number' => 'ПК 14', 'type' => AdvisoryType::COMMITTEE ], 'pk15' => [ 'title' => 'Проектирование и строительство сетей водоснабжения и водоотведения', 'number' => 'ПК 15', 'type' => AdvisoryType::COMMITTEE ], 'pk16' => [ 'title' => 'Проектирование и строительство сетей газоснабжения и газораспределения', 'number' => 'ПК 16', 'type' => AdvisoryType::COMMITTEE ], 'pk17.1' => [ 'title' => 'Системы электросвязи зданий и сооружений', 'number' => 'ПК 17.1', 'type' => AdvisoryType::COMMITTEE ], 'pk17.2' => [ 'title' => 'Системы электроснабжения зданий и сооружений', 'number' => 'ПК 17.2', 'type' => AdvisoryType::COMMITTEE ] ] ], 'group4' => [ 'title' => 'Строительные конструкции и основания', 'children' => [ 'pk18' => [ 'title' => 'Надежность строительных конструкций и оснований', 'number' => 'ПК 18', 'type' => AdvisoryType::COMMITTEE ], 'pk20' => [ 'title' => 'Металлические конструкции', 'number' => 'ПК 20', 'type' => AdvisoryType::COMMITTEE ], 'pk21' => [ 'title' => 'Бетонные и железобетонные конструкции. Заполнители, бетоны и растворы', 'number' => 'ПК 21', 'type' => AdvisoryType::COMMITTEE, 'children' => [ 'rg21.1' => [ 'title' => 'Заполнители, бетоны и растворы', 'number' => 'РГ 21.1', 'type' => AdvisoryType::WORKGROUP ], 'rg21.2' => [ 'title' => 'Сухие строительные смеси', 'number' => 'РГ 21.2', 'type' => AdvisoryType::WORKGROUP ] ] ], 'pk22' => [ 'title' => 'Каменные конструкции', 'number' => 'ПК 22', 'type' => AdvisoryType::COMMITTEE ], 'pk23' => [ 'title' => 'Деревянные конструкции', 'number' => 'ПК 23', 'type' => AdvisoryType::COMMITTEE ], 'pk24' => [ 'title' => 'Блоки оконные, дверные и воротные. Комплектующие изделия и материалы', 'number' => 'ПК 24', 'type' => AdvisoryType::COMMITTEE ], 'pk25' => [ 'title' => 'Ограждающие конструкции зданий, в т.ч. фасадные', 'number' => 'ПК 25', 'type' => AdvisoryType::COMMITTEE ], 'pk26' => [ 'title' => 'Композитные полимерные конструкции и изделия строительного назначения', 'number' => 'ПК 26', 'type' => AdvisoryType::COMMITTEE ] ] ] ] ] ]; 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)); } }