【问题标题】:Run artisan in Laravel code without creating migration records in the table migrations在 Laravel 代码中运行 artisan 而不在表 migrations 中创建迁移记录
【发布时间】:2019-01-21 17:44:21
【问题描述】:

我的函数中有这段代码可以运行文件夹中的所有迁移文件,以便在新数据库中动态创建新表。但是,每次我运行它时,它都会在表migration 中创建一条新记录,这是正常的。但是下次我再次运行该函数时,迁移文件被排除在外,因为它们之前已经运行过。

如何强制它不向“迁移”表写入任何内容?因为我不希望这成为部署的一部分。这些表用于创建新的租户客户端。

Artisan::call('migrate', array('--path' => 'database/templates', '--force' => true));

【问题讨论】:

    标签: php laravel laravel-artisan


    【解决方案1】:

    在更好地了解您的目标之后,听起来您希望在事件发生时创建额外的表。

    为此,您只需要使用 Schema 构建器来完成它并完全避免使用迁移。考虑以下示例:

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    
    Schema::create('new_table_name', function (Blueprint $table) {
        $table->increments('id');
        // additional columns
        $table->timestamps();
        $table->softDeletes();
    });
    

    您可以将其包装在一个新的类方法中,以便在您想创建一个额外的表而不影响迁移时触发。

    如果你想稍后删除一个表,你可以运行:

    Schema::dropIfExists('new_table_name');
    

    【讨论】:

    • 播种机可以创建新表吗?
    • @ln9187 我更新了我的答案,我想我明白了你现在想要做什么。在不使用迁移的情况下为其他实体生成新表。
    【解决方案2】:

    看来我可以使用选项--pretend 转储所有查询,而无需编写迁移批处理

    Options:
          ...
          --pretend              Dump the SQL queries that would be run.
          ...
    

    【讨论】:

      猜你喜欢
      • 2015-03-28
      • 2018-11-02
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2014-12-01
      • 2021-06-15
      • 1970-01-01
      • 2015-08-28
      相关资源
      最近更新 更多