Laravel 7 заполнить файл SQL мутациями - PullRequest
0 голосов
/ 10 апреля 2020

Я переписываю большой проект с нуля. БД похожа, но таблицы были переименованы, а поля перемещены.

Я хочу создать команды в моем Laravel 7.4 проекте, которые читают MySQL дампов каждой таблицы и импортируют их в новую DB. Я не могу просто запустить команды, так как все изменилось.

Существует ли простой способ чтения файлов дампа, чтобы каждая команда вставки давала мне массив с данными этой записи из старой БД, поэтому Затем я могу изменить этот массив по мере необходимости, чтобы использовать его для заполнения моих моделей?

Я бы хотел избежать необходимости читать файл построчно и использовать регулярные выражения для вычитания того, что мне нужно.

1 Ответ

0 голосов
/ 10 апреля 2020

В итоге я написал несколько регулярных выражений, чтобы сделать это построчно, и, в конце концов, код вполне управляем. Мне нужно будет написать собственные строки регулярных выражений для каждого файла SQL.

public function handle()
{
    $sql = file_get_contents('./database/old_sql/language.sql');

    preg_match_all('/\(.*\)[\,;]/', $sql, $lines);

    foreach (array_shift($lines) as $line) {
        preg_match('/^\((\d+)\, \'(.*)\', (\d+)\)[\,;]$/', $line, $values);

        $language = Language::updateOrCreate([
            'languages.id' => $values[1]
        ], [
            'id'        => $values[1],
            'name'      => $values[2],
            'parent_id' => $values[3],
        ]);
    }
}

Если у кого-то есть лучшее, более чистое решение, я буду рад услышать об этом.

...