当前位置: 首页 > 知识库问答 >
问题:

在Laravel迁移文件中填充数据库

赫连秦迟
2023-03-14

null

public function up()
{
    Schema::create('users', function($table){

        $table->increments('id');
        $table->string('email', 255);
        $table->string('password', 64);
        $table->boolean('verified');
        $table->string('token', 255);
        $table->timestamps();

        DB::table('users')->insert(
            array(
                'email' => 'name@domain.com',
                'verified' => true
            )
        );

    });
}

但是在运行 时,我会遇到以下错误: php>

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'vantage.users' doesn't exist

这显然是因为Artisan还没有创建表,但是所有的文档似乎都说有一种方法可以使用Fluent Query作为迁移的一部分来填充数据。

有人知道怎么做吗?谢啦!

共有3个答案

卢才艺
2023-03-14

以下是使用Laravel's数据库种子器比使用迁移更可取的一个很好的解释:https://web.archive.org/web/20171018135835/http://laravelbook.com/laravel-database-seeding/

null

巫马磊
2023-03-14

我知道这是一个老的帖子,但因为它出现在谷歌搜索,我想我应该在这里分享一些知识。@erin-geyer指出,混合迁移和播种机会让人头疼,@justamartin反驳说,有时您希望/需要将数据填充为部署的一部分。

我想更进一步地说,有时希望能够一致地推出数据更改,这样您就可以(例如)部署到staging,看到一切都很好,然后放心地部署到生产中,获得相同的结果(而不必记得运行一些手动步骤)。

然而,将种子和迁移分离出来仍然是有价值的,因为这是两个相关但又不同的问题。我们的团队做出了妥协,创建了称为播种机的迁移。这看起来像:

public function up()
{
    Artisan::call( 'db:seed', [
        '--class' => 'SomeSeeder',
        '--force' => true ]
    );
}

这允许您像迁移一样执行一次种子。您还可以实现防止或增强行为的逻辑。例如:

public function up()
{
    if ( SomeModel::count() < 10 )
    {
        Artisan::call( 'db:seed', [
            '--class' => 'SomeSeeder',
            '--force' => true ]
        );
    }
}

如果模型少于10个,这显然会有条件地执行你的播种机。如果您希望将种子程序作为标准种子程序包含在调用 时以及迁移时执行,这样就不会出现“双倍向上”的情况,那么这将非常有用。您还可以创建一个反向播种机,以便回滚按预期工作,例如。

public function down()
{
    Artisan::call( 'db:seed', [
        '--class' => 'ReverseSomeSeeder',
        '--force' => true ]
    );
}

第二个参数 是使to seeder能够在生产环境中运行所必需的。

上官迪
2023-03-14

不要将db::insert()放入schema::create()中,因为create方法必须在插入内容之前完成表的制作。请尝试以下操作:

public function up()
{
    // Create the table
    Schema::create('users', function($table){
        $table->increments('id');
        $table->string('email', 255);
        $table->string('password', 64);
        $table->boolean('verified');
        $table->string('token', 255);
        $table->timestamps();
    });

    // Insert some stuff
    DB::table('users')->insert(
        array(
            'email' => 'name@domain.com',
            'verified' => true
        )
    );
}
 类似资料:
  • 本文向大家介绍Laravel 内部数据库迁移,包括了Laravel 内部数据库迁移的使用技巧和注意事项,需要的朋友参考一下 示例 每个迁移都应该有一个up()方法和一个down()方法。该up()方法的目的是执行所需的操作,以将数据库模式置于新状态,并且该down()方法的目的是使该方法执行的所有操作反向up()。确保该down()方法正确撤消您的操作对于能够回滚数据库架构更改至关重要。 示例迁移

  • 使用Eloquent 仓库地址: Eloquent ORM 安装 composer require illuminate/database 注意: 有个问题就是安装了illuminate/database不能分页,需要安装illuminate/pagination; illuminate/pagination有个坑,在分页另说 添加数据库配置 修改Conf/Config.php在userConf方

  • 文档:https://eggjs.org/zh-cn/tutorials/sequelize.html sequelize 数据库迁移命令 命令 含义 sequelize db:migrate 运行迁移文件 sequelize db:migrate:status 列出所有迁移的状态 sequelize db:migrate:undo 隔离数据库:迁移:撤消 sequelize db:migrate

  • Phinx 可以让开发者简洁的修改和维护数据库。 它避免了人为的手写 SQL 语句,它使用强大的 PHP API 去管理数据库迁移。开发者可以使用版本控制管理他们的数据库迁移。

  • 此应用程序将在Person类的帮助下写入和读取csv文件。它不会用数据填充表。我试图在将csv文件加载到list=new ArrayList()的同时执行表的加载,方法是将相同的数据加载到plist=new ArrayList(),然后将此plist传输到data=FXCollections。可观察列表(plist) 请解释此代码失败的地方。是否无法在加载列表ArrayList的同时加载obser

  • series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $