@alexh7854

Как быстро записать много записей в базу в laravel при этом проверяя уникальность?

Здраувствуйте.

Я пишу приложение - словарь.
Нужно записывать в базу много записей (до 10 тысяч).

Я импортирую в базу новые слова, сейчас слова записываются в базу по одному, так как перед добавлением я проверяю нет ли слова в базе.

Сейчас это работает очень медленно.

Подскажите как это можно ускорить? Как не записывать слова по одному?
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@alexh7854 Автор вопроса
Нашел решение
$myWords = Word::all();

        $wordsFromFile = [];

        foreach($words as $word => $translation)
        {
            $word = mb_strtolower($word);
            $translation = mb_strtolower($translation);

            $wordInDatabase = $myWords->where('word', $word)->first();

            if($wordInDatabase == null)
            {
                $wordsFromFile[] = [
                    'word' => $word,
                    'translation' => $translation,
                    'state' => 0,
                ];
            }
        }
        
        Word::insert($wordsFromFile);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
Можно создать большой запрос и воспользоваться
INSERT IGNORE
или
ON DUPLICATE KEY UPDATE
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы