对创建和运行Laravel迁移的质疑

对创建和运行Laravel迁移的质疑,laravel,migration,Laravel,Migration,我已经阅读了文档,但是我仍然对创建迁移有一些疑问。在我的项目中,我运行了migrate命令来创建Laravel的默认表(用户、密码重置和迁移)。现在,我想一个接一个地为我在EER图上计划的其余表创建迁移。我的疑问如下: 我可以使用php artisan make:migration create_new_table创建一个新的迁移,并使用--create=tablename补码创建一个新表 --create=tablename是否会立即在DB上创建一个空表 既然我已经有三个表了,我应该为每个新

我已经阅读了文档,但是我仍然对创建迁移有一些疑问。在我的项目中,我运行了
migrate
命令来创建Laravel的默认表(用户、密码重置和迁移)。现在,我想一个接一个地为我在EER图上计划的其余表创建迁移。我的疑问如下:

我可以使用
php artisan make:migration create_new_table
创建一个新的迁移,并使用
--create=tablename
补码创建一个新表

  • --create=tablename
    是否会立即在DB上创建一个空表
  • 既然我已经有三个表了,我应该为每个新表使用
    --create=tablename
  • 写入所有代码后,
    migrate
    命令将运行我的所有迁移。在为所有表编写迁移之后,是否使用此命令?再次运行它会覆盖数据库中已有的表吗
这可能是基本的东西,但我想在继续之前确定一下

  • 不需要提供表名,所以这个问题没有意义
  • 不,您不需要这样做,请参见1
  • migrate
    将每个迁移文件的名称保存在
    migrations
    表中,并为其分配一个
    batch
    id。每个后续的
    migrate
    命令将检查表中是否存在所有文件名,如果它们不存在,将在运行所述文件中定义的迁移之前将其添加到当前批中
  • 将--create=tablename立即在DB上创建一个空表吗

    否,在运行
    php artisan migrate
    时将创建表。它将为
    tablename
    创建一个带有“样板文件”的新迁移。在这种情况下,这将添加到迁移文件中:

    Schema::create('tablename', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
    }); 
    
    既然我已经有三个表了,我应该为每个新表使用--create=tablename吗

    它实际上只是样板文件的一个辅助方法。因此,如果你正在创建一个新的,它将使它更容易

    就个人而言,我更喜欢使用
    php-artisan-make:model-m SomeModel
    创建迁移,这将创建模型和样板迁移(因为
    -m
    选项)

    例如,如果运行
    php artisan make:model SomeModel-m
    ,它将a)创建一个名为SomeModel的模型b)创建一个样板迁移(称为像
    时间戳\u create\u someu models\u table
    )并具有:

    我喜欢它,因为这样很容易坚持Laravels约定(表的复数形式,模型的单数形式)

    还可以使用命令将名称空间添加到模型中。例如,如果您的模型位于
    app/models
    目录中,那么您应该改为编写
    php artisan make:model-m models/SomeModel

    在编写所有代码之后,migrate命令将运行我的所有迁移。在为所有表编写迁移之后,是否使用此命令?再次运行它会覆盖数据库中已有的表吗

    Laravel专门为记录已经运行的迁移创建一个SQL表。无论执行多少次
    php-artisan-migrate
    ,它都不会运行相同的迁移两次。除非你用命令把它们滚回去


    如果一个表已经存在,它只会抛出一个SQL错误,说明无法创建表,因为它已经存在。

    您能谈谈您提到的make:model命令吗?我的下一步是为我已有的表和新表创建模型。另外,谢谢你的回答!我已经对我的答案进行了编辑,添加了一些解释。我建议你试试命令,自己看看。如果不运行
    php artisan migrate
    ,只需删除由命令创建的文件,数据库中的任何内容都不会更改。
    Schema::create('some_models', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
    });