['prop' => 'fio', 'required' => true], 'email' => ['prop' => 'email', 'required' => true], 'inn' => ['prop' => 'inn_organizacii', 'required' => true], 'position' => ['prop' => 'dolznost', 'required' => true], 'rank' => ['prop' => 'polozenie'] ]; public function __construct(Advisory $advisory) { $this->advisory = $advisory; } public function collection(Collection $collection) { $collection->each(function($row) { if ($row = $this->mapData($row)) $this->importRow($row); }); } public function importRow($row) { $company = Company::getByData(['inn' => $row['inn']]); $user = User::getByData($row + ['password' => 'Qwerty1!']); $companyMember = $company->addMember($user, $row['position'] ?? null); $this->advisory->addMember($companyMember, $this->translateRank($row['rank'] ?? null)); } public function translateRank($rank) { $aRanks = [ 'председатель' => AdvisoryMemberRank::CHAIRMAN, 'заместитель председателя' => AdvisoryMemberRank::VICE_CHAIRMAN, 'секретарь' => AdvisoryMemberRank::SECRETARY ]; return $aRanks[Str::lower(trim($rank))] ?? AdvisoryMemberRank::ORDINARY; } }