Laravel 的 Artisan 没有说要迁移

Posted

技术标签:

【中文标题】Laravel 的 Artisan 没有说要迁移【英文标题】:Laravel's Artisan says nothing to migrate 【发布时间】:2014-02-11 13:38:03 【问题描述】:

我使用php artisan migrate:install 安装了迁移,然后使用php artisan migrate:make create_teams_table 命令创建了迁移。现在我尝试使用我根据official documentation 制作的以下命令运行它们:

php artisan migrate --path=app/foo/migrations/2014_01_21_143531_create_teams_table.php

这在控制台上给了我以下信息:

没有要迁移的东西。

数据库中的migrations 表为空,也没有创建新表。我不明白为什么文档在路径中说foofoo 是什么意思,它来自哪里?首先,我认为路径是错误的,因为 foo 的事情,而且我知道路径是相对于 app 文件夹的,所以我将其更改为 app/database/migrations,但它不起作用。我也尝试了很多其他路径组合,但都没有奏效。

我是不是走错路了?在这种情况下,控制台不应该显示其他类型的有用信息吗? foo 是什么意思?如何运行我的迁移?

【问题讨论】:

如果你将迁移保存在app/database/migrations,你应该可以完全忽略路径参数 【参考方案1】:

使用

php artisan migrate:fresh

它将刷新您的数据库并再次运行所有迁移

【讨论】:

【参考方案2】:

至少在 Laravel 7 中,您必须在迁移名称的末尾添加“.php”。

例子:

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

希望这个答案对某人有所帮助。

【讨论】:

【参考方案3】:

您无需将迁移文件移动到任何地方,只需更改其文件名即可;例如,增加时间整数,然后使用指向迁移的路径运行migrate 命令。例如:php artisan migrate --path="database/migrations/2019_07_06_145857_create_products_table.php"

【讨论】:

是的,这是正确的答案。为我工作。该文件已被缓存,这就是它无法正常工作的原因。【参考方案4】:

就我而言,我只需要从迁移表中删除一行,然后执行

php artisan migrate --path=app/foo/migrations/2014_01_21_143531_create_teams_table.php

【讨论】:

【参考方案5】:

需要删除迁移表的2014_01_21_143531_create_teams_table。

    进入数据库(phpmyadmin) 打开您的数据库名称。 3.打开迁移表。 删除 2014_01_21_143531_create_teams_table 行

【讨论】:

这是正确的答案,在运行的系统上工作时,不能只重置整个数据库!【参考方案6】:

试试这个:

第一:

php artisan migrate:reset

回滚:2014_03_28_142140_user_table

没有什么可以回滚的。

秒:

php artisan migrate

已迁移:2014_03_28_142140_user_table

检查数据库。

【讨论】:

如果有现有数据并且您不想丢失它,请先将其导出(备份)。【参考方案7】:

对于仍然无法迁移其数据库的任何人:

假设你有一个文件要迁移abc_migrate.php

首先将您的文件放入名为abc_folder 的新文件夹中。 然后,输入这个命令 php artisan migrate --path=database/migrations/abc_folder/.

您不必在目录路径的最后添加文件名。

完成。希望能帮助到你。

【讨论】:

【参考方案8】:

path 参数用于创建迁移,例如:

 php artisan migrate:make create_user_table --path=app/database/migrations/user_migrations/

但是没有记录在运行迁移时使用它,就像在以前的 laravel 版本中一样。

删除 --path 参数应该适用于您的情况

【讨论】:

这与示例中的尝试非常相似。【参考方案9】:

如果数据库中的migrations 表为空,就会出现问题。 所以解决方案是打开作曲家的修补匠

$ php artisan tinker
>>> Schema::drop('users')
>>> Schema::drop('password_resets')
>>> Schema::drop('orders')
>>> exit
php artisan migrate

这是执行上述命令的结果

nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate

在 Connection.php 第 647 行: SQLSTATE [42S01]:基表或视图已存在:1050 表“用户” alre ady 存在 (SQL: create table users (id int unsigned not null auto_increment 主键,name varchar(255) 不为 null, email varchar(255) 不为空,password varchar(255) 不为空, remember_token varchar(100) 空,created_at 时间戳空, updated_attimestamp null) 默认字符集 utf8mb4 整理 utf8mb4_unicode_ci)

在 Connection.php 第 449 行: SQLSTATE [42S01]:基表或视图已存在:1050 表“用户” 已经存在了

nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate:rollback
Nothing to rollback.
nishanth@localhost:~/Desktop/html/hutch$ php artisan tinker
Psy Shell v0.8.17 (PHP 7.1.20-1+ubuntu16.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> Schema::drop('users')
=> null
>>> Schema::drop('password_resets')
=> null
>>> Schema::drop('orders')
=> null
>>> exit
Exit:  Goodbye.
nishanth@localhost:~/Desktop/html/hutch$ php artisan migrate
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2018_08_18_071213_create_orders_table
Migrated:  2018_08_18_071213_create_orders_table
nishanth@localhost:~/Desktop/html/hutch$ 

如果方法down() 不存在,也要定义它。 否则会显示

SQLSTATE[42S02]:未找到基表或视图:1051 未知表 'XYZ.ABC'(SQL:删除表 ABC

/**
  * Reverse the migrations.
  *
  * @return void
  */
public function down()

    Schema::dropIfExists('ABC');

【讨论】:

【参考方案10】:

对我有什么帮助:

php artisan config:cache
php artisan migrate

【讨论】:

这对我来说是个问题。谢谢。【参考方案11】:

foo 只是一个例子。 Laravel 默认会寻找在 app/database/migrations 中运行的迁移。尝试删除 --path 参数,看看它是否有效。

【讨论】:

不应该运行所有迁移吗?我只需要运行最后一个,因为该项目有很多旧的现在是错误的。 迁移的问题是它们应该作为一个批处理工作。您应该能够毫无问题地运行php artisan migrate:refresh。因此,考虑到这一点,我会说删除/移动那些损坏的并保留好的。 哦,我刚刚意识到我混淆了文档中的章节。我认为我可以通过传递路径来运行特定的迁移,但它实际上是迁移创建示例。多么失败。

以上是关于Laravel 的 Artisan 没有说要迁移的主要内容,如果未能解决你的问题,请参考以下文章

laravel 和 artisan 错误无法在迁移时添加外键

如何一次运行 Laravel artisan 迁移?

“php artisan migrate”显示“没有要迁移的东西”

Laravel - php artisan migrate 不起作用

如何在 laravel 中使用“php artisan migrate”迁移我的数据库

Laravel Artisan 迁移 [BadMethodCallException]