【问题标题】:Eloquent in migration雄辩的移民
【发布时间】:2023-04-05 03:22:02
【问题描述】:

我可以在迁移中使用eloquent 吗?问题是,我需要根据我在模型中设置的关系向数据库添加一些值。我知道我可以通过query builder 风格和一些 SQL 或某种方式来做到这一点,但只使用 eloquent 会更容易。我不确定将来是否会出现错误。那么,在迁移中使用什么 - 雄辩或查询构建器?

【问题讨论】:

    标签: laravel eloquent query-builder


    【解决方案1】:

    如果您愿意,您可以在迁移中使用查询构建器甚至 Eloquent。您还可以通过迁移运行数据库播种器:

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    
        // Run seeders
        Artisan::call('db:seed');
    
        // Or run posts seeder
        Artisan::call('db:seed --class=PostsTableSeeder');
    
        // Or call Query Builder
        DB::table('posts')->insert([
           ['name' => 'Hiya'] 
        ]);
    }
    

    【讨论】:

      【解决方案2】:

      我可以在迁移中使用eloquent 吗?

      是的,但它可能是个坏主意。

      Eloquent 依赖于您的模型与您的数据库同步。如果有区别,您可能会发现 Eloquent 很困难。请记住,迁移专门用于处理数据库查询,而不是您可能从中获得的任何类型的对象驱动数据。

      我会说,作为一项规则,始终坚持在迁移中使用 DB。但是没有什么能阻止你使用 Eloquent。

      【讨论】:

      • 好吧..我知道我可以而且我不应该。但我想知道是否值得花更多时间编写查询构建器或只是使用 eloquent 来节省时间
      • 如果您使用 Eloquent 并且侥幸成功,那么您现在 就可以了——但是如果您将来尝试运行该迁移,它可能会中断最终。您正在进行的任何类型的测试都可能会中断。我想说坚持DB,尽管它很烦人。
      • if you try running that migration in the future it will likely break eventually 是什么意思?你能解释一下是什么导致它在未来中断吗?
      • @DuncanLuk 当然。假设您更改了 Eloquent 模型,因为您更改了字段类型或添加了新字段。也许你改变了一个演员,添加一个突变,添加一个关系。现在这种模式只能在现在起作用,在过去就行不通了。让我们说一下关系;当数据库中不存在该关系时,一旦您使用模型,它就会出错。
      • @DuncanLuk 不完全是,因为模型在迁移期间被调用,所以在迁移过程中会出现模型不反映数据库结构的状态。例如,迁移 1 创建一个表,迁移 2 修改该表。 Eloquent 模型已更新以反映 Migration 2,但被 Migration 1 使用。当调用 Migration 1 时,模型将中断,因为 Migration 2 尚未发生。如果关系是可选的,也许关系是一个不好的例子,但同样适用于强制转换、突变等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多