Laravel 5.1刷新并填充单个表格。

34

我想要在Laravel 5.1中刷新和填充单个表格。这是否可能?

我尝试了下面的代码,但它会出现错误(语法不正确)。

php artisan migrate:refresh --path=database/migrations/CreateTableTimesheet
如果我使用:php artisan migrate:refresh,它只会显示:

Nothing to migrate


你能找到任何解决方案吗? - user5832543
8个回答

38
你可以使用 migrate:refresh 命令回滚所有迁移,然后执行 migrate 命令。该命令会有效地重新创建整个数据库。
php artisan migrate:refresh

您可以使用--class选项来指定要单独运行的特定填充器类:

php artisan db:seed --class=UserTableSeeder

完整的代码如下:

php artisan migrate:refresh
php artisan db:seed --class=UserTableSeeder

希望这可以帮到你。

15

最好先截断您的同一张表,然后再进行种子数据填充:

public function run()
{
    Table::truncate();
    //seed your table here
}

接下来,您可以像这样运行相同的填充器:

php artisan db:seed --class=YourSeeder

如果您正在使用Eloquent来操作名为Users的模型,那么代码应该是Users::on()->truncate();。 - Jagadish Nallappa

4
也许首先只需备份数据库,删除它并检查整个种子、迁移和刷新机制是否正常工作。但是,请先转储Artisan自动加载。

2
一个让你的答案得到点赞的好方法是包含一个示例或者一个示例链接。 - c0y0teX

3

到目前为止,我认为没有任何答案解决了迁移和填充单个表的问题。因此,假设有迁移文件database/migrations/create_foo_table.php和填充文件database/seeds/FooTableSeeder.php,其中包含FooTableSeeder填充类,您可以执行以下操作:

php artisan migrate:refresh --path=database/migrations/create_foo_table.php
php artisan db:seed --class=FooTableSeeder

这将回滚(Rollback)、迁移(Migrate)并填充(Seed)你的Foo表。请参阅Laravel 5.1文档中的回滚迁移运行填充器(在撰写本文时,Laravel 7.x已发布,但语法未更改)。


1

包括完整的表名称
例如

php artisan migrate:refresh --path='database/migrations/2014_10_12_000000_create_table_timesheet.php'

1
php artisan tinker


>>> App\Status::truncate()

将清空状态表

这样你就可以执行


>>> App\{MODEL_CLASS}::truncate()


当我不想清除所有表格,特别是用户时,我发现这非常有用。


1

关于在 Laravel 框架中运行迁移、回滚、刷新和填充特定文件的技巧

迁移

php artisan migrate --path=/database/migrations/fileName.php

回滚

php artisan migrate:rollback --path=/database/migrations/fileName.php

刷新

php artisan migrate:refresh --path=/database/migrations/fileName.php

种子生成器

php artisan db:seed --class=classNameTableSeeder

谢谢


0

您可以分为两步来完成:

  1. 刷新您特定的表格:
php artisan migrate:refresh --path=database/migrations/00_create_foo_table.php

database/seeds/DatabaseSeeder.php 中设置种子表:
composer dump-autoload
php artisan db:seed

=== 额外信息 ===

您可以在 DatabaseSeeder.php 中注释掉您不想使用的种子数据:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            FooSeeder::class,
            // BarSeeder::class,
            // UserSeeder::class,
        ]);
    }
}

在这个例子中,只有 database/seeds/FooSeeder.php 会被传递。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接