Php 如何在Laravel中基于模型制作移植文件

Php 如何在Laravel中基于模型制作移植文件,php,laravel,orm,eloquent,migration,Php,Laravel,Orm,Eloquent,Migration,如果我有一些具有非默认功能(如软删除或自定义id名称)的模型,并希望从中创建一个迁移文件,其中包含所有这些属性,该怎么办?这是我的模型: class Test extends Model { use SoftDeletes; protected $primaryKey = 'test_id'; protected $table = 'my_flights'; protected $dates = ['deleted_at']; } 我希望我的迁移文件以它为基础。但是当

如果我有一些具有非默认功能(如软删除或自定义id名称)的模型,并希望从中创建一个迁移文件,其中包含所有这些属性,该怎么办?这是我的模型:

class Test extends Model
{
   use SoftDeletes;

   protected $primaryKey = 'test_id';
   protected $table = 'my_flights';
   protected $dates = ['deleted_at'];
}
我希望我的迁移文件以它为基础。但是当我使用命令
php artisan make:migration create_test(s)_table
(我尝试了
test
tests
)时,也使用参数
--create
--table
,我得到了迁移文件,因为没有任何模型:

class CreateTestTable extends Migration
{
    public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }  ...

在正常开发中,迁移先于模型细节。迁移包含模式定义,而不是模型。雄辩的模型遵循活动记录模式,不包含列的类型定义。如果遵循命名约定,则不需要在模型中指定关于表或列的任何内容


make:migration命令不会从现有模型或数据库表中提取任何内容。有一个包可以支持从现有数据库架构创建迁移:但不能从模型本身创建迁移。

在Laravel中没有对此的本机支持,但可能有第三方包。@JonasStaudenmeir所以默认情况下,我应该跟踪相同的属性两次:一次在模型文件中,一次在迁移文件中?在这种情况下,如果我在模型中设置自定义主键名称,在迁移文件中设置其他名称(对不起,我是新来的,还没有自己测试过)?是的,您必须自己保持同步。通常您不需要“跟踪”模型上的属性,因为模型类将直接从数据库元数据获取大部分属性。雄辩的ORM是关于约定而非配置的。您只需要在模型上添加特殊条件,例如不遵循约定的属性和相关数据类型。。谢谢你的提示。我不知道我必须只在模型中输入不符合约定的属性。现在,我需要重新考虑如何使用
elount
)。我主要想做的是不要在不同的文件(模型和迁移)中跟踪相同的属性两次。所以在的回答中,我发现不可能创建模型形式迁移,所以我认为可能是逆序的。你说的跟踪属性是什么意思?您在模型中的何处跟踪属性?例如:
protected$primaryKey='test_id';受保护的$table='my_flights'。因此,如果我希望我的迁移文件与模型相似,我必须在其中也输入相同的值。当我想更改例如主键名称时,我必须在两个文件中都进行更改。如果您遵循命名约定,$table和$primaryKey都不是必需的,但即使如此,我也不会在这两个文件中都称之为跟踪属性。请在答案中添加此注释和问题中的注释来编辑答案,我会接受;)