У меня есть полная база данных и вам нужно создать миграцию. Я предполагаю, что должен быть способ сделать это с дампа, но не уверен. Есть ли способ автоматически или, по крайней мере, легче выполнить эту задачу?
Могу ли я импортировать дамп mysql в миграцию laravel?
Ответ 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
После отмены вы можете использовать командную строку для создания переноса из существующей базы данных следующим образом:
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-й мастер, а второй станет вашим мастером.