ホームページ バックエンド開発 PHPチュートリアル Laravelデータベース移行方法の具体例

Laravelデータベース移行方法の具体例

Jan 30, 2018 pm 02:24 PM
laravel データベース 移行する

この記事では主にLaravelのデータベース移行方法を紹介していますが、編集者がとても良いと思ったので、参考として共有させていただきます。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

移行の生成

--table および --create オプションを使用して、データ テーブルの名前、または移行の実行時に作成される新しいデータ テーブルの名前を指定できます。移行ファイルを事前生成するときに、指定したデータ テーブルにこれらのオプションを入力する必要があります:


php artisan make:migration create_users_table
php artisan make:migration create_users_table --create=users
php artisan make:migration add_votes_to_users_table --table=users
ログイン後にコピー

フィールドを追加

databasemigrations2017_07_30_133748_create_users_table.php


<?php

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

class CreateUsersTable extends Migration
{
  /**
   * 运行数据库迁移
   *
   * @return void
   */
  public function up()
  {
    //
      Schema::create(&#39;users&#39;,function (Blueprint $table){
        $table->increments(&#39;id&#39;)->comment(&#39;递增ID&#39;);
        $table->string(&#39;email&#39;,60)->comment(&#39;会员Email&#39;);
        $table->string(&#39;phone&#39;,20)->comment(&#39;会员手机号&#39;);
        $table->string(&#39;username&#39;,60)->comment(&#39;用户名&#39;);
        $table->string(&#39;password&#39;,32)->comment(&#39;用户密码&#39;);
        $table->char(&#39;rank&#39;,10)->comment(&#39;会员等级&#39;);
        $table->unsignedSmallInteger(&#39;sex&#39;)->comment(&#39;性别;0保密;1男;2女&#39;);
        $table->unsignedSmallInteger(&#39;status&#39;)->comment(&#39;用户状态&#39;);
        $table->ipAddress(&#39;last_ip&#39;)->default(&#39;0.0.0.0&#39;)->comment(&#39;最后一次登录IP&#39;);
        $table->timeTz(&#39;last_login&#39;)->comment(&#39;最后一次登录时间&#39;);
        $table->timestamps();
      });
  }

  /**
   * 回滚数据库迁移
   *
   * @return void
   */
  public function down()
  {
    //
    Schema::drop(&#39;users&#39;);
  }
}
ログイン後にコピー

新しいデータ テーブルを作成するには、使用できますスキーマファサード作成メソッド。 create メソッドは 2 つのパラメーターを受け取ります。最初のパラメーターはデータ テーブルの名前で、2 番目のパラメーターはクロージャーです。このクロージャーは、新しいデータ テーブルの定義に使用されるブループリント オブジェクトを受け取ります

hasTable メソッドと hasColumn メソッドを簡単に使用できます。データテーブルまたはフィールドが存在するかどうかを確認するには:


if (Schema::hasTable(&#39;users&#39;)) {
  //
}
if (Schema::hasColumn(&#39;users&#39;, &#39;email&#39;)) {
  //
}
ログイン後にコピー

デフォルト以外のデータベース接続でデータベース構造の操作を実行したい場合は、接続メソッドを使用できます:


Schema::connection(&#39;foo&#39;)->create(&#39;users&#39;, function (Blueprint $table) {
  $table->increments(&#39;id&#39;);
});
ログイン後にコピー

データベースを使用できます構造体 コンストラクターにエンジン属性を設定して、データテーブルのストレージエンジンを設定します:


Schema::create(&#39;users&#39;, function (Blueprint $table) {
  $table->engine = &#39;InnoDB&#39;;
  $table->increments(&#39;id&#39;);
});
ログイン後にコピー

データテーブルの名前を変更して削除します


Schema::rename($from, $to);//重命名

//删除已存在的数据表
Schema::drop(&#39;users&#39;);
Schema::dropIfExists(&#39;users&#39;);
ログイン後にコピー

フィールドを作成します


Schema::table(&#39;users&#39;, function (Blueprint $table) {
  $table->string(&#39;email&#39;);
});
ログイン後にコピー
命令描述
$table->bigIncrements('id');递增 ID(主键),相当于「UNSIGNED BIG INTEGER」型态。
$table->bigInteger('votes');相当于 BIGINT 型态。
$table->binary('data');相当于 BLOB 型态。
$table->boolean('confirmed');相当于 BOOLEAN 型态。
$table->char('name', 4);相当于 CHAR 型态,并带有长度。
$table->date('created_at');相当于 DATE 型态
$table->dateTime('created_at');相当于 DATETIME 型态。
$table->dateTimeTz('created_at');DATETIME (带时区) 形态
$table->decimal('amount', 5, 2);相当于 DECIMAL 型态,并带有精度与基数。
$table->double('column', 15, 8);相当于 DOUBLE 型态,总共有 15 位数,在小数点后面有 8 位数。
$table->enum('choices', ['foo', 'bar']);相当于 ENUM 型态。
$table->float('amount', 8, 2);相当于 FLOAT 型态,总共有 8 位数,在小数点后面有 2 位数。
$table->increments('id');递增的 ID (主键),使用相当于「UNSIGNED INTEGER」的型态。
$table->integer('votes');相当于 INTEGER 型态。
$table->ipAddress('visitor');相当于 IP 地址形态。
$table->json('options');相当于 JSON 型态。
$table->jsonb('options');相当于 JSONB 型态。
$table->longText('description');相当于 LONGTEXT 型态。
$table->macAddress('device');相当于 MAC 地址形态。
$table->mediumIncrements('id');递增 ID (主键) ,相当于「UNSIGNED MEDIUM INTEGER」型态。
$table->mediumInteger('numbers');相当于 MEDIUMINT 型态。
$table->mediumText('description');相当于 MEDIUMTEXT 型态。
$table->morphs('taggable');加入整数 taggable_id 与字符串 taggable_type。
$table->nullableMorphs('taggable');与 morphs() 字段相同,但允许为NULL。
$table->nullableTimestamps();与 timestamps() 相同,但允许为 NULL。
$table->rememberToken();加入 remember_token 并使用 VARCHAR(100) NULL。
$table->smallIncrements('id');递增 ID (主键) ,相当于「UNSIGNED SMALL INTEGER」型态。
$table->smallInteger('votes');相当于 SMALLINT 型态。
$table->softDeletes();加入 deleted_at 字段用于软删除操作。
$table->string('email');相当于 VARCHAR 型态。
$table->string('name', 100);相当于 VARCHAR 型态,并带有长度。
$table->text('description');相当于 TEXT 型态。
$table->time('sunrise');相当于 TIME 型态。
$table->timeTz('sunrise');相当于 TIME (带时区) 形态。
$table->tinyInteger('numbers');相当于 TINYINT 型态。
$table->timestamp('added_on');相当于 TIMESTAMP 型态。
$table->timestampTz('added_on');相当于 TIMESTAMP (带时区) 形态。
$table->timestamps();加入 created_at 和 updated_at 字段。
$table->timestampsTz();加入 created_at and updated_at (带时区) 字段,并允许为NULL。
$table->unsignedBigInteger('votes');相当于 Unsigned BIGINT 型态。
$table->unsignedInteger('votes');相当于 Unsigned INT 型态。
$table->unsignedMediumInteger('votes');相当于 Unsigned MEDIUMINT 型态。
$table->unsignedSmallInteger('votes');相当于 Unsigned SMALLINT 型态。
$table->unsignedTinyInteger('votes');相当于 Unsigned TINYINT 型态。
$table->uuid('id');相当于 UUID 型态。

字段修饰


Schema::table(&#39;users&#39;, function (Blueprint $table) {
  $table->string(&#39;email&#39;)->nullable();
});
ログイン後にコピー
ModifierDescription
->after('column')将此字段放置在其它字段「之后」(仅限 MySQL)
->comment('my comment')增加注释
->default($value)为此字段指定「默认」值
->first()将此字段放置在数据表的「首位」(仅限 MySQL)
->nullable()此字段允许写入 NULL 值
->storedAs($expression)创建一个存储的生成字段 (仅限 MySQL)
->unsigned()设置 integer 字段为 UNSIGNED
->virtualAs($expression)创建一个虚拟的生成字段 (仅限 MySQL)

字段更新


Schema::table(&#39;users&#39;, function (Blueprint $table) {
  $table->string(&#39;phone&#39;,20)->change();
  $table->string(&#39;username&#39;,60)->->nullable()->change();
});
ログイン後にコピー

重命名字段


Schema::table(&#39;users&#39;, function (Blueprint $table) {
  $table->renameColumn(&#39;from&#39;, &#39;to&#39;);
});
ログイン後にコピー

字段移除


Schema::table(&#39;users&#39;, function (Blueprint $table) {
  $table->dropColumn([&#39;last_ip&#39;, &#39;last_login&#39;]);
});
ログイン後にコピー

在使用字段更新,重命名字段,字段移除之前,请务必在你的 composer.json文件require键名中添加< "doctrine/dbal": "^2.5">值。然后composer update进行更新或


composer require doctrine/dbal
ログイン後にコピー

创建索引


$table->string(&#39;email&#39;)->unique();
ログイン後にコピー
CommandDescription
$table->primary('id');加入主键。
$table->primary(['first', 'last']);加入复合键。
$table->unique('email');加入唯一索引。
$table->unique('state', 'my_index_name');自定义索引名称。
$table->unique(['first', 'last']);加入复合唯一键。
$table->index('state');加入基本索引。

开启和关闭外键约束


Schema::enableForeignKeyConstraints();
Schema::disableForeignKeyConstraints();
ログイン後にコピー

运行迁移


php artisan migrate
ログイン後にコピー

在线上环境强制执行迁移


php artisan migrate --force
ログイン後にコピー

回滚迁移

若要回滚最后一次迁移,则可以使用 rollback 命令。此命令是对上一次执行的「批量」迁移回滚,其中可能包括多个迁移文件:


php artisan migrate:rollback
ログイン後にコピー

在 rollback 命令后加上 step 参数,你可以限制回滚迁移的个数。例如,下面的命令将会回滚最后的 5 个迁移。


php artisan migrate:rollback --step=5
ログイン後にコピー

migrate:reset 命令可以回滚应用程序中的所有迁移:


php artisan migrate:reset
ログイン後にコピー

使用单个命令来执行回滚或迁移

migrate:refresh 命令不仅会回滚数据库的所有迁移还会接着运行 migrate 命令。所以此命令可以有效的重新创建整个数据库:


php artisan migrate:refresh
// 刷新数据库结构并执行数据填充
php artisan migrate:refresh --seed
ログイン後にコピー

使用 refresh 命令并加上 step 参数,你也可以限制执行回滚和再迁移的个数。比如,下面的命令会回滚并再迁移最后的 5 个迁移:


php artisan migrate:refresh --step=5
ログイン後にコピー

无法生成迁移文件

在 Laravel 项目中,由于测试,有时候用 PHP artisan make:migration create_xxx_table 创建数据库迁移。如果把创建的迁移文件 database/migrations/2017_07_30_133748_create_xxx_table.php 文件给删除了,再次执行 php artisan make:migration create_xxx_table 会报错:

复制代码 代码如下:


[ErrorException]                                                                                                                                         
 include(E:\laraver\vendor\composer/../../database/migrations/2017_07_30_133748_create_users_table.php): failed to open stream: No such file or directory 

重新运行 composer update 又可以执行上面的命令了。

相关推荐:

PHP开发框架Laravel数据库操作方法总结

以上がLaravelデータベース移行方法の具体例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 クラフトCMSのキャッシングの問題を解決する:Wiejeben/Craft-Laravel-Mixプラグインの使用 Apr 18, 2025 am 09:24 AM

CraftCMSを使用してWebサイトを開発する場合、特にCSSやJavaScriptファイルを頻繁に更新する場合、リソースファイルのキャッシュ問題が発生することがよくあります。古いバージョンのファイルがブラウザによってキャッシュされ、ユーザーが最新の変更を表示しないようにすることがあります。この問題は、ユーザーエクスペリエンスに影響を与えるだけでなく、開発とデバッグの難しさを高めます。最近、プロジェクトで同様のトラブルに遭遇し、いくつかの調査の後、プラグインWiejeben/Craft-Laravel-Mixが見つかりました。

Laravelユーザーログイン機能 Laravelユーザーログイン機能 Apr 18, 2025 pm 12:48 PM

Laravelは、ユーザーモデル(Eloquentモデル)の定義、ログインフォームの作成(ブレードテンプレートエンジン)、ログインコントローラーの作成(認証\ログインコントローラーの継承)、ログイン要求の検証(Auth ::試行)の検証など、ユーザーログイン機能を実装するための包括的なAuthフレームワークを提供します。ヘッダー。さらに、AUTHフレームワークは、パスワードのリセット、電子メールの登録と検証などの機能も提供します。詳細については、Laravelのドキュメントを参照してください:https://laravel.com/doc

Laravel Frameworkインストール方法 Laravel Frameworkインストール方法 Apr 18, 2025 pm 12:54 PM

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

Laravelを学ぶ方法Laravelを無料で学ぶ方法 Laravelを学ぶ方法Laravelを無料で学ぶ方法 Apr 18, 2025 pm 12:51 PM

Laravelフレームワークを学びたいが、資源や経済的圧力に苦しんでいないのですか?この記事では、Laravelの無料学習を提供し、オンラインプラットフォーム、ドキュメント、コミュニティフォーラムなどのリソースを使用して、PHP開発の旅から習得するための堅実な基盤を築く方法を教えてくれます。

ビジネスの世界におけるオラクルの役割 ビジネスの世界におけるオラクルの役割 Apr 23, 2025 am 12:01 AM

Oracleはデータベース会社だけでなく、クラウドコンピューティングとERPシステムのリーダーでもあります。 1。Oracleは、データベースからクラウドサービスおよびERPシステムへの包括的なソリューションを提供します。 2。Oraclecloudは、AWSとAzureに挑戦し、IAAS、PAAS、SAASサービスを提供します。 3. e-businesssuiteやfusionApplicationsなどのOracleのERPシステムは、企業がオペレーションを最適化するのに役立ちます。

Laravelのバージョン番号を表示する方法は? Laravelのバージョン番号を表示する方法 Laravelのバージョン番号を表示する方法は? Laravelのバージョン番号を表示する方法 Apr 18, 2025 pm 01:00 PM

Laravelフレームワークには、開発者のさまざまなニーズを満たすためにバージョン番号を簡単に表示するための組み込みの方法があります。この記事では、Composer Command Lineツールの使用、.ENVファイルへのアクセス、PHPコードを介したバージョン情報の取得など、これらの方法について説明します。これらの方法は、Laravelアプリケーションのバージョン化の維持と管理に不可欠です。

Laravelのバージョンは何ですか?初心者向けのLaravelのバージョンを選択する方法 Laravelのバージョンは何ですか?初心者向けのLaravelのバージョンを選択する方法 Apr 18, 2025 pm 01:03 PM

初心者向けのLaravel Frameworkバージョンの選択ガイドでは、この記事は、多くのバージョンの中で初心者が情報に基づいた選択を行うのを支援するように設計されたLaravelのバージョンの違いに分かれています。各リリースの主要な機能に焦点を当て、長所と短所を比較し、初心者がスキルレベルとプロジェクトの要件に基づいてLaravelの最も適切なバージョンを選択できるように便利なアドバイスを提供します。初心者の場合、Laravelの適切なバージョンを選択することは、学習曲線と全体的な開発経験に大きな影響を与える可能性があるため、重要です。

See all articles