0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

laravelでAPPを作り直したときの、マイグレーションを実行するための手順

Posted at

ちょっとメモするところがなかったので、Qiitaに書く。

昔Laravelで作ったモノをLaravel11で作り直したけど、マイグレーション忘れてたので備忘録的に書いてみる。

環境:Laravel11 を Docker Installation Using Sail で構築している。
参考:https://laravel.com/docs/11.x#docker-installation-using-sail
phpenvやら色々やろうとしたけど、これが最速で環境壊さないし楽。dockerもAppleシリコン対応したし。

本記事ではローカルにデータを落として、マイグレーションを実行しているが、
そも database を2つ持てるなら config/database.php に定義してマイグレーション書くでよい。mysqldump やらリストアやらは不要。

事前準備

現状の mysqldump を取得する

それぞれの環境次第だけど、こんな感じ。ホストはおまけ。

mysqldump -h localhost -u root ra  > mysqldump_ra_20240702.sql

で、マイグレーションするためのいろいろ

1. 現状の dump を docker の mysql の別 database に入れる

docker ps で mysql の名前を取得し、そこに dump を送る

docker cp mysqldump_ra_20240702.sql ra8-mysql-1:/tmp

2. docker の mysql に入って データベース作って リストアする

入り方は色々あると思うので省略

mysql -u root -p
mysql> create database laravel2;
mysql> GRANT ALL ON `laravel2`.* TO 'sail'@'%';
mysql> exit
mysql -u root -p laravel2 < /tmp/mysqldump_ra_20240702.sql

3. config/database.php に2つ目のmysql定義を作る

1つめからコピーしてきて、定義名とdatabase名のみ変更する

'mysql_old' => [
    'driver' => 'mysql',
    'url' => env('DB_URL'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE2', 'laravel2'),

4. 2つめからデータを取得して1つ目にデータを入れるコマンドを作成する

参考: https://laravel.com/docs/11.x/artisan#generating-commands

php artisan make:command MigrateData

5. コマンドを作成する

DB:connection で過去のやつを引っ張ってきて新しいModelに入れてく感じ

public function handle()
{
    $users = DB::connection('mysql_old')->table('users')->get();
    foreach ($users as $old_user) {
        $user = new User();
        $user->name = $old_user->name;
        $user->email = $old_user->email;
        $user->password = $old_user->password;
        $user->save();

6. DBを初期化して実行する

DBはfreshしたほうが色々楽。テストデータ消したくない場合は気をつけてね。

php artisan migrate:fresh
php artisan app:migrate-data

7. マイグレーションが終わったら dump 取得する

mysqldump -u root -p laravel > /tmp/mysqldump_ra_20240708.sql

8. docker からデータ持ってくる

docker cp ra8-mysql-1:/tmp/mysqldump_ra_20240708.sql ./

このファイルを本番で使う感じ。

tips

過去の APP_KEY が base64 じゃないので base64化する

base64 じゃない場合だけ。

$ php artisan tinker (動かない場合は composer require laravel/tinker 実行する)
$code = "Laravel6時代のapikey";
base64_encode($code);

コレを .env にセットして config:clear する

php artisan config:clear

その他

どこで何を実行しているのかは読める人を想定。
./vender/bin/sail が面倒になったので docker 内から直接 php artisan 実行しているとか、書かないでもわかるよね。とか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?