4

こんにちは、移行によるlaravelでのテーブルの作成(通常はDBでの作業)について質問があります。

私はこのようなものを持っています(コードハッピーから)

    <?php
        Schema::create('users', function($table) {

        $table->increments('id');

        $table->string('username', 32);
        $table->string('email', 320);
        $table->string('password', 64);

        $table->integer('role');

        $table->boolean('active');

        $table->timestamps();
    });

OK、これで 9 つのフィールドを持つテーブル「users」が作成されますが、このコールバックに混乱しています。まず、変数「$table」はどのクラスのインスタンスですか? ここで何が起こったのか、これがどのように機能するのか、それぞれ説明してもらえますか?

4

1 に答える 1

10

さて、これがどのように起こるかです:

  1. を呼び出すと、引数として渡したテーブルの名前にリンクされSchema::create()たオブジェクトが作成されます。Blueprint
  2. 2 番目のパラメータであるコールバックは、以前に作成されたこのオブジェクトを引数としてClosure受け取り、それに基づいて動作する です。Blueprint$table
  3. オブジェクトのメソッドを呼び出すと、データベースによると$table、実際にはGrammarクラスに関連付けられます。つまり、MySQL データベースを使用している場合、MySqlGrammarクラスが使用されます。これにより、心配することなく、使用するすべてのデータベースに対して有効な SQL を取得できます。
  4. 最後に、すべてのコマンドを実行し、すべてのジョブを実行します。

生成された実際の SQL クエリを確認したい場合は--pretend、コマンドにオプションを追加できますmigrate。読みやすいように、ファイルに保存することをお勧めします。元:

php artisan migrate --pretend > app/storage/migration.sql

これにより、app/storage/migration.sqlファイルに保存されます。

于 2013-06-18T22:43:28.187 に答える