人気のPHP WEBアプリケーションフレームワークLaravelのTips。 (Laravelアプリの初期化)composer create-project laravel/laravel my-app :タグ「artisan」での検索

Laravelのマイグレーションでカラムの名前と型を変更する

● Laravelのマイグレーションでカラムの名前と型を変更する

● Laravelのバージョンが10より低い場合はカラムの変更にはパッケージのインストールが必要です。

composer require doctrine/dbal

Laravelのマイグレーションでカラムの名前と型を変更するには、
今既にあるマイグレーションファイルは 変更せずに置いておいて、変更を記述したマイグレーションファイルを新規に作成します。

テーブル名 カラム名
artists year_birth_no smallint

 ↓ (例)こちらに変更するとします。

テーブル名 カラム名
artists year_birth_no_name string

●1. 変更用マイグレーションファイルの新規作成

マイグレーションファイル名はなんでもいいです。

php artisan make:migration change_artists_table_column_year_birth_no  --table=artists

成功すると 次のようなファイルが生成されます

2019_07_08_180737_change_artists_table_column_year_birth_no

●2. 変更用マイグレーションファイルの編集

以下のように変更用の命令と戻し用の命令を記述しておきます。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class ChangeArtistsTableColumnYearBirthNo extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // カラム名を変更
        Schema::table('artists', function (Blueprint $table) {
            $table->renameColumn('year_birth_no', 'year_birth_no_name');
        });

        // 型を変更
        Schema::table('artists', function (Blueprint $table) {
            $table->string('year_birth_no_name')->default(NULL)->change();
        });

        // カラム「fax_name」を「string型」「nullを許可」に変更
        $table->string('fax_name')->nullable()->change();
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        // 型を戻す
        Schema::table('artists', function (Blueprint $table) {
            $table->smallInteger('year_birth_no_name')->change();
        });

        // カラム名を戻す
        Schema::table('artists', function (Blueprint $table) {
            $table->renameColumn('year_birth_no_name','year_birth_no');
        });

        // カラム「fax_name」を「string型」「nullを許可しない」に変更
        $table->string('fax_name')->nullable(false)->change();

    }

}

(注意)tinyIntegerでは実行できません。 ↓ を参照

●3. 変更用追加パッケージをインストールする

composer require doctrine/dbal

●4. 変更用マイグレーションファイルの実行

php artisan migrate

●5. 変更をやっぱり戻す(ロールバック)

php artisan migrate:rollback

● エラー Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found となる場合

 composer require "doctrine/dbal:2.*"

● tinyInteger の場合はSQL文を直接流します

        Schema::table('applications', function (Blueprint $table) {
            // nullを許可に変更
            DB::statement('ALTER TABLE users MODIFY COLUMN is_active tinyint COMMENT \'フラグ\'');
        });
No.1545
09/25 15:30

edit

artisan

Laravel の バージョン( Ver )をソースコード、コマンド、Bladeテンプレート、コントローラーから調べる

● Laravel の バージョンをソースコードから調べる

vendor/laravel/framework/src/Illuminate/Foundation/Application.php を調べます

	/**
	 * The Laravel framework version.
	 *
	 * @var string
	 */
	const VERSION = '5.0.31';

● Laravel の バージョンをコマンドから調べる

php artisan -V

● Laravel の バージョンを Blade テンプレートから調べる

{{ App::VERSION() }}

● Laravel の バージョンを コントローラーで取得する

$laravel_ver = app()->version();

文字列で返ります

5.4.36

● Laravel の 先頭のメジャーバージョンを コントローラーで取得する

$laravel_ver = preg_replace("{([0-9]+)\.([0-9]+)\.([0-9]+)}","$1", app()->version() );

文字列で返ります

5.4.36
No.1454
07/12 12:51

edit

Blade
artisan

artisan migrate コマンドを本番サーバで安易に実行しないようにする

● artisan migrate コマンドを本番サーバで安易に実行しないようにする

.env を 以下のように設定します。

APP_ENV=production

APP_ENV=production の設定がある時に、migrate コマンドを実行すると

$ artisan migrate:fresh --seed

次のような確認入力が表示されます。
これで本番環境で安易なマイグレーションの実行を抑止することができます。

**************************************
*     Application In Production!     *
**************************************
 Do you really wish to run this command? (yes/no) [no]:
No.1415
01/16 11:51

edit

artisan

Laravel で DBモデル(データベース)のカラムを変更(追加)する

1. テーブル変更のパッケージを追加する

composer require doctrine/dbal

2. テーブル「articles」を変更するマイグレーションファイル「add_columns_articles_table」を生成する

add_columns_articles_table は任意の命名でOKですが「作業内容_テーブル名_table」としておくとテーブル作成時のファイルと命名が揃います

php artisan make:migration add_columns_articles_table  --table=articles

3. 生成されたファイル「2018_xx_xx_xxxxxx_add_columns_articles_table.php」にテーブル追加の命令を記述する

例:「articles」テーブルに以下のカラムを追加します

・「status_id」カラムの後ろにint型の「recruit_flg」を追加します
・「recruit_flg」カラムの後ろにint型の「recruit_date」を追加します
    public function up()
    {
        Schema::table('articles', function (Blueprint $table) {
            $table->integer('recruit_flg')->default(0)->after('status_id');    // この行を追加
            $table->dateTime('recruit_date')->nullable()->after('recruit_flg');    // この行を追加
        });
    }

注意:SQLiteでは任意の位置にカラム追加が出来ないようです
回避策 : https://goo.gl/a2atCx

4. マイグレーションを戻す処理を down()メソッドに記述します

    public function down()
    {
        Schema::table('articles', function (Blueprint $table) {
            $table->dropColumn(['recruit_date','recruit_flg']);
        });
    }

5. カラム追加のマイグレーション実行

php artisan migrate

6. 実行したマイグレーションを戻す

php artisan migrate:rollback

以上で、既存のデータベースのデータを削除することなく、カラムを追加できます。

No.1381
08/26 18:25

edit

モデル
artisan