Здравствуйте.
На сайте нужно загружать данные из csv файла в базу. При этом каждую строку из csv файла нужно проверять в базе.
Данных не должно быть в базе, в базу загружаются только новые данные.
Подскажите как правильно это реализовать?
Я пока реализовал это вот так и думаю что неправильно, загрузка очень медленная, а если в базе много данных, то запрос заканчивается 502 ошибкой.
$wordsFromFile = array_map(function($data) { return str_getcsv($data,";");}, file($request->file('text_file')) );
// Все слова из базы
$myWords = Word::all();
$dbWords = [];
foreach ($myWords as $myWord) {
$dbWords[] = $myWord->word;
}
$wordsResult= [];
foreach($wordsFromFile as $key => $data)
{
if($key == 0) {continue;}
$word = isset($data[0]) ? mb_strtolower($data[0]) : "empty_field";
$translation = isset($data[1]) ? $data[1] : "empty_field";
$state = isset($data[2]) ? $data[2] : 0;
//$wordInDatabase = $myWords->where('word', $word)->first();
if(!in_array($word, $dbWords))
{
$wordsResult[] = [
'word' => mb_strtolower($word),
'translation' => mb_strtolower($translation),
'state' => $state,
];
}
}
Word::insert($wordsResult);