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();
    });

好的,这将创建具有 9 个字段的表“用户”,但我对这个回调感到困惑。首先变量“$table”是哪个类的实例?有人可以分别解释一下这里发生了什么吗?

4

1 回答 1

10

好吧,它是这样发生的:

  1. 当您调用 时Schema::create(),它会创建一个Blueprint对象,链接到您作为参数传递的表的名称。
  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 回答