Подтвердить что ты не робот

Могу ли я импортировать дамп mysql в миграцию laravel?

У меня есть полная база данных и вам нужно создать миграцию. Я предполагаю, что должен быть способ сделать это с дампа, но не уверен. Есть ли способ автоматически или, по крайней мере, легче выполнить эту задачу?

4b9b3361

Ответ 1

Laravel не может этого сделать, но я думаю, что это поможет: генератор миграции Laravel

Он генерирует миграции на основе существующих таблиц.

Ответ 2

Вы можете импортировать дампы в Laravel следующим образом:

DB::unprepared(file_get_contents('full/path/to/dump.sql'));

Если бы я должен был реорганизовать существующее приложение, я бы потратил время, чтобы написать миграции с нуля, импортировать дамп в разные таблицы (или другой db, если имена таблиц совпадают), а затем импортировать содержимое в новая структура через семена.

Ответ 3

У меня есть полная база данных и вам нужно создать миграцию. Я предполагаю, что должен быть способ сделать это с дампа, но не уверен. Есть ли способ автоматически или, по крайней мере, легче выполнить эту задачу?

Не автоматически, но мы запускаем дампы миграции с помощью DB::unprepared(). Вы можете использовать file_get_contents для импорта из файла .sql и, следовательно, вам не нужно беспокоиться об исключении всех дампов "...

<?php

use Illuminate\Database\Migrations\Migration;

class ImportDump extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        DB::unprepared("YOUR SQL DUMP HERE");
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {

    }

}

Ответ 4

На этот вопрос уже дан ответ, но недавно в проекте предоставленные ответы больше не удовлетворяли мои потребности. Он также не импортирует всю базу данных, а одну (большую) таблицу. Я чувствовал, что должен поделиться этим с тобой.

Проблема заключалась в том, что я хотел импортировать довольно большую таблицу (список zipcodes) во время моей работы: migrate operation. Решение с DB:: unprepared ($ dump) ушло в прошлое, и я нашел альтернативу, которая МНОГО быстрее.

Просто экспортируйте свою таблицу как CSV и используйте следующий код в своей функции миграции вверх().

    // i had to str_replace the backslash on windows dev system... but works on linux, too
    $filename = str_replace("\\", "/", storage_path('path/in/storage/to/your/file.csv'));

    $query = "LOAD DATA LOCAL INFILE '".$filename."' INTO TABLE yourtable
        FIELDS TERMINATED BY '\t'
        ENCLOSED BY ''
        LINES TERMINATED BY '\n'
        IGNORE 0 LINES
        (col1,col2,...);";

    DB::unprepared($query);

Просто обновите запрос по мере необходимости. И, конечно же, вы должны убедиться, что таблица с cols 'col1', 'col2' и т.д. существует. Я создал его непосредственно перед импортом файла. с помощью Schema:: create()...

Если вы столкнулись с следующим сообщением об ошибке:

PDO::exec(): LOAD DATA LOCAL INFILE forbidden

Вы можете избавиться от этого сообщения: хотя он не документирован, вы можете просто добавить ключ "options" в ваш файл config/database.php. Например, мой выглядит следующим образом:

        'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
        'options'   => array(
            PDO::MYSQL_ATTR_LOCAL_INFILE => true,
        )

Примечание: в настоящее время я использую laravel 5, но он также должен работать с laravel 4.

Ответ 5

другое решение работает для меня в Laravel 5.2:

DB::unprepared(File::get('full/path/to/dump.sql'));

Ответ 6

Вы можете создать миграцию и модели laravel непосредственно из базы данных, используя https://github.com/XCMer/larry-four-generator

Выполните следующий код после установки пакета

php artisan larry:fromdb

Ответ 7

Недавно я стоял перед той же проблемой. я не хотел устанавливать пакет специально для этого, поэтому я решил написать небольшой инструмент, чтобы помочь мне и другим;)

Вот ссылка: http://laravel.stonelab.ch/sql-seeder-converter/

И здесь вы можете прокомментировать это, если у вас есть предложения по улучшению или вопросы: http://www.stonelab.ch/en/sql-to-laravel-seeder-converter/

Ответ 8

Вы можете использовать пакет Raahul/Larryfour, модель и генератор миграции для Laravel 4

Пакет Raahul/Larryfour

После отмены вы можете использовать командную строку для создания переноса из существующей базы данных следующим образом:

php artisan raahul:fromdb --only yourdatabase

И вы найдете перенос в приложении/migrations/folder

Ответ 9

Другой альтернативой является использование PDO напрямую:

$sql_dump = File::get('/path/to/file.sql');
DB::connection()->getPdo()->exec($sql_dump);

Ответ 10

Я бы использовал mysqldump, если вы переходите на другой сервер. mysqldump [options] --all-databases

Хорошо здесь Ошибка импорта SQL-дампа в MySQL: Неизвестная база данных/Невозможно создать базу данных

Кроме того, вы можете создать репликацию, мастер-ведомый (или более сложный мастер-мастер), и как только вы начнете работать, вы просто снимаете с себя 1-й мастер, а второй станет вашим мастером.