Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何手动将Laravel migration命名为“so”;“php artisan迁移”;你能跑吗?_Php_Laravel - Fatal编程技术网

如何手动将Laravel migration命名为“so”;“php artisan迁移”;你能跑吗?

如何手动将Laravel migration命名为“so”;“php artisan迁移”;你能跑吗?,php,laravel,Php,Laravel,我有一个用PHP编写的附带项目,它可以根据审计表中的信息自动生成迁移文件。由于该文件是由我的应用程序在不使用artisan命令的情况下创建的,因此我不知道如何使Laravel查看我的迁移文件 我的应用程序生成的迁移文件示例: <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;

我有一个用PHP编写的附带项目,它可以根据审计表中的信息自动生成迁移文件。由于该文件是由我的应用程序在不使用artisan命令的情况下创建的,因此我不知道如何使Laravel查看我的迁移文件

我的应用程序生成的迁移文件示例:

<?php

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

class sampleMigration extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('audit_database_index_column_relations', function(Blueprint $table){
        $table->integer('relation_id');
        $table->integer('database_index_id');
        $table->integer('database_column_id');
        $table->integer('sequence_position');
        $table->integer('is_deleted');
});
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('audit_database_index_column_relations');
    }
}
在我的第二次尝试中,我以我的up()函数为例替换了默认迁移“create_user_table”的up()函数,正如我所料,它执行起来没有任何问题!一般来说,我认为错误一定是由于我命名文件的方式造成的

因此,我想知道如何命名迁移文件,以便Laravel能够检测并运行它们


提前谢谢你

尝试运行迁移时收到的错误消息实际上提供了这种情况下所需的答案。函数使用文件名来确定迁移类的名称。我们从最开始的时候就开始从内部读取像这样的链式函数

explode('_', $file)
该方法获取文件名并将其分解为一个数组,然后根据分数进行拆分。所以

2014\u 10\u 12\u 100000\u创建\u密码\u重置\u表

变成

[ "2014", "10", "12", "100000", “创建”, “密码”, “重置”, “表”, ]

接下来,该方法将切掉数组的前4个元素。这些元素包含创建迁移的时间戳,以确定运行迁移的顺序,但与类名无关

array_slice(explode('_', $file), 4)
Str::studly(implode('_', array_slice(explode('_', $file), 4)));
现在我们有了

[ “创建”, “密码”, “重置”, “表”, ]

接下来,数组被折叠成一个字符串,每个单词之间用下划线分隔

implode('_', array_slice(explode('_', $file), 4))
给我们

创建\u密码\u重置\u表

最后,Laravel Str::studly helper函数将这个新字符串转换为studly case以确定类名

array_slice(explode('_', $file), 4)
Str::studly(implode('_', array_slice(explode('_', $file), 4)));
CreatePasswordResetsTable

因此,要创建迁移文件名,请从创建文件的时间戳开始,然后添加所有小写的类名称,并用下划线分隔

Class SampleMigration extends Migration
会是

2019年12月04日37860000日样本迁移


特别注意:不要跳过时间戳或尝试在前4个元素中抛出您想要的任何内容。文件在目录中的显示顺序是迁移运行的顺序,时间戳确保迁移始终以正确的顺序运行。跳过此步骤可能会导致在创建表之前运行更改表的迁移,或者导致更改无序运行,并给当前表带来意外的结果

为什么不以Laravel的方式创建一个迁移,并查看文件名和类名,看看它是如何完成的呢?你的回答真的帮助了我^^我很感激!