Php 拉拉维尔雄辩主义的特点相当

Php 拉拉维尔雄辩主义的特点相当,php,laravel,eloquent,doctrine-orm,Php,Laravel,Eloquent,Doctrine Orm,我有着很长的Symfony教义背景,现在开始学习拉维8 我的第一个发现是,在模型和迁移中都使用了make:migration(据我目前所知)之后,需要手动创建迁移 Symfony和Doctrine允许一系列自动化,我只需要从模型(php注释或yaml)创建字段或关系,然后启动Doctrine:schema:validate和make:migration . 假设我创建了一个具有一对多关系的帖子和评论实体。 如果我在php类中定义关系 class Comment extends Model {

我有着很长的Symfony教义背景,现在开始学习拉维8

我的第一个发现是,在模型和迁移中都使用了
make:migration
(据我目前所知)之后,需要手动创建迁移

Symfony和Doctrine允许一系列自动化,我只需要从模型(php注释或yaml)创建字段或关系,然后启动
Doctrine:schema:validate
make:migration

.
假设我创建了一个具有一对多关系的帖子和评论实体。
如果我在php类中定义关系

class Comment extends Model
{

    /**
     * Get the Post owning this comment
     */
    public function post()
    {
        return $this->belongsTo(Post::class);
    }
}
课后

class Post extends Model
{    
    /**
     * Get the comments for the blog post.
     */
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}
是否可以生成迁移脚本来更新数据库并创建这些关系?或者我必须重写它两次(一次在PHP类中使用hasMany/BelongsTo,然后在migration文件中再次重写?
没有一个中心文件来映射/读取模型(链接了php和数据库)现在对我来说似乎很奇怪。
我刚刚开始,但文档中似乎没有提到任何等效内容

编辑:为了更清楚:我想问的是,是否存在从模型(或中心映射文件:yaml或注释)生成迁移代码/脚本的等效方法,而不必向迁移和模型写入字段(在$fillable或其他字段中…)

编辑2我能找到的最接近的东西是 另一个很麻烦的用例:多对多迁移
我真希望能够自动手动编写第三个中间表。

在laravel框架中,尽管有其他著名的工作,如symfony或python django,但您负责创建数据库迁移文件。通过这种方式,您可以自由定制数据库模式并添加任何数据库约束例如(唯一约束、关系约束等)。您还可以在迁移文件中使用
\DB::unprepared();
添加任何原始sql

我可以告诉你,对这个流程有点困惑是正常的,因为你已经习惯了其他框架中的这种自动化,就像我一样,但是相信我,你已经习惯了这个流程


顺便说一下,有一些软件包可以为您实现自动化(根据模型创建迁移文件)。

要创建迁移,您需要运行命令

php artisan make:migration migration_name
php artisan make:model table_name
要创建模型,需要运行命令

php artisan make:migration migration_name
php artisan make:model table_name
请参阅此链接

通过创建模型,您可以创建一个表,从中可以定义列类型和不同的属性,并定义与其他表的关系。
通过创建迁移文件,您可以定义表列和约束。

这就是我不喜欢Laravel迁移的原因。该软件包可能会给您类似的体验。问题不在于如何为模型创建迁移文件,而在于寻求一种根据模型字段自动填充迁移文件的方法。因此,有没有等价物?我将不得不手工编写所有内容?这不是交易破坏者或任何东西,但我很惊讶没有这样的功能。这有点麻烦、耗时且容易出错。当您运行migration命令时,它将生成一个基本结构,而没有其他内容。通过使用外部包,您可以根据模型生成迁移。但如果您不想使用外部包,则必须自己编写。通过运行上面给出的命令,它将生成基本结构,因此您只需添加列及其定义。我可能会习惯,但我很惊讶:我宁愿花时间编写业务逻辑,也不愿重写两次字段逻辑。一个d容易出错(我头晕)因为我是手工操作的。而且手工检查字段的有效性很麻烦:|是的,一开始有点烦人。但我不建议你用外部软件包来做这件事,从长远来看,它会有问题。我绝对不想使用外部软件包。这就是为什么我总是对学说感到满意的原因。