1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel6】モデル名(テーブル名)を変更する際の修正箇所

Posted at

Laravelでモデル名を変更した際に修正する必要がある箇所について。

バージョン:Laravel 6.20.32

修正箇所

モデル名の変更に併せて、下記ファイルの修正を行う

  • モデル
  • マイグレーション
  • コントローラ
  • ファクトリ※
  • シーダ※
  • ルーティング

※ファクトリとシーダについては作成している場合のみ修正が必要。

修正前後のファイル名

修正前の名称がOrderDetailというモデルを例にあげる。
今回は、モデル名の接頭辞に"D"をつける必要があり、モデル名をOrderDetailからDOrderDetailに変更する。それに応じてテーブル、コントローラなどの命名も変更した。

修正前 修正後
モデル名 OrderDetail DOrderDetail
テーブル名 order_details d_order_details
コントローラ名 OrderDetailController DOrderDetailControllers
ファクトリ名 OrderDetailFactory DOrderDetailFactory
シーダ名 OrderDetailSeeder DOrderDetailSeeder

モデル

モデルのファイル名を『OrderDetail.php』から『DOrderDetail.php』に変更する。

DOrderDetail.phpの修正

クラス名OrderDetailをDOrderDetailに変更する。

class DOrderDetail extends Model // クラス名を変更
{
    protected $table = 'd_order_details'; 
    // テーブル名をorder_detailsからd_order_detailsに変更
    // ここではテーブル名を明示的に指定しているが、指定しない場合は、
    // クラス名を複数形にして「スネークケース」にしたものが、テーブル名として使用されるので、省略可能

    // 以下、各種メソッド記述
    public function ...
}

DOrderDetailをリレーションするモデル

リレーションをはっている場合、DOrderDetailをリレーションするモデルに記載しているメソッドを下記のように変更。

public function order_details()
{
    return $this->hasMany('App\Models\DOrderDetail'); // OrderDetailからDOrderDetailに変更
}

マイグレーション

下記の2つの方法がある。

  • もとのマイグレーションファイルを修正する方法
  • もとのマイグレーションファイルを残して、新しくマイグレーションファイルを作成し、テーブル名をリネームする方法

もとのマイグレーションファイルを修正する方法

マイグレーションのファイル名を『作成日時_create_order_details_table.php』から『作成日時_create_d_order_details_table.php』に変更する。

class CreateDOrderDetailsTable extends Migration { // クラス名を変更

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('d_order_details', function(Blueprint $table) // テーブル名を変更
		{
            $table->bigIncrements('id');
			// 作成するカラムについての記述
		});
	}


	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('d_order_details'); // テーブル名を変更
	}

}

もとのマイグレーションファイルを残して、テーブル名をリネームする方法

もとのマイグレーションファイルを残して、新しくマイグレーションファイルを作成しテーブル名をリネームする場合は、rename()メソッドを使う。

下記、もとのマイグレーションファイル『作成日時_create_order_details_table.php』のクラス

class CreateOrderDetailsTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('order_details', function(Blueprint $table)
		{
            $table->bigIncrements('id');
			// 作成するカラムについての記述
		});
	}


	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('order_details');
	}

}

新しいマイグレーションファイルを作成

php artisan make:migration rename_order_details_table

下記、新しいマイグレーションファイル『作成日時_rename_order_details_table.php』のクラス

class RenameOrderDetailsTable extends CreateOrderDetailsTable // もとのクラスからリネーム用の拡張クラスを作成
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::rename('order_details', 'd_order_details'); // rename()メソッドでテーブル名を変更
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('d_order_details');
    }
}

再度マイグレーションして確認

php artisan migrate:fresh

コントローラ

ファイル名を『OrderDetailController.php』から、『DOrderDetailController.php』に変更する。

use App\Models\DOrderDetail; // 読み込むモデル名を変更
                             // 他のコントローラでもDOrderDetailモデルを読み込んでいる場合は、そのコントローラの記述も上記と同様に変更

class DOrderDetailController extends Controller // クラス名を変更
{
    // メソッド記述
}

ファクトリ、シーダ

ファクトリ、シーダを作成している場合は、
ファイル名をそれぞれ、『DOrderDetailFactory.php』、『DOrderDetailSeeder.php』に変更する。

ファクトリ DOrderDetailFactory.php

use App\Models\DOrderDetail; // モデル名を変更
use Faker\Generator as Faker;

$factory->define(DOrderDetail::class, function (Faker $faker) {
    return [
        // 各カラムにダミーデータ投入
    ];
});

シーダ DOrderDetailSeeder.php

class DOrderDetailSeeder extends Seeder // クラス名を変更
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\Models\DOrderDetail::class, 1)->create(); // モデル名を変更
    }
}

シーダ DatabaseSeeder.php

DatabaseSeeder.phpにて、複数のシーダを一気に実行している場合は、それも修正。下記の例では50回ループで実行している。

class DatabaseSeeder extends Seeder
{

    /**
     * Seed the order relation database.
     *
     * @return void
     */
    public function makeOrder(int $count){
        for ($i = 0; $i < $count; $i++){
            $this->call([
                DOrderDetailSeeder::class, // シーダ名を変更
                // 他にループさせるシーダもここに記載
            ]);
        }
        return;
    }

    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            // 一度のみ実行するシーダをここに記述
        ]);
        $this->makeOrder(50); // 上記のmakeOrderメソッドを50回実行
    }
}

ルーティング

ルーティング(routes/web.php)にコントローラの記述がある場合は修正。

Route::get('/order', 'Order\DOrderDetailController@index')->name('order_detail'); // コントローラ名を変更
1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?