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
表为空,也没有创建新表。我不明白为什么文档在路径中说foo
。 foo
是什么意思,它来自哪里?首先,我认为路径是错误的,因为 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,password
varchar(255) 不为空,remember_token
varchar(100) 空,created_at
时间戳空,updated_at
timestamp 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 错误无法在迁移时添加外键
“php artisan migrate”显示“没有要迁移的东西”
Laravel - php artisan migrate 不起作用