我实际上正在构建一个基于 Laravel 的简单 Web 应用程序。 我创建了一张模型卡,并想为此添加一个迁移。 当我运行命令:“php artisan migrate”时,出现错误
SQLSTATE\[42S02\]: Base table or view not found: 1146 Table 'agenda.migrations' doesn't exist (Connection: mysql, SQL: select\<\\migration from migrations order by batch asc,migration asc)
at vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:822
818▕ $this-\>getName(), $query, $this-\>prepareBindings($bindings), $e
819▕ );
820▕ }
821▕
➜ 822▕ throw new QueryException(
823▕ $this-\>getName(), $query, $this-\>prepareBindings($bindings), $e
824▕ );
825▕ }
826▕ }
所以我尝试运行 php artisan migrate:install 来创建我的迁移表并且它有效。但是当我再次运行 php artisan migrate 时它会删除迁移表。
我也尝试过:php artisan migrate:reset 和 php artisan migrate:rollback
这是我的卡类代码
<?php
namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Database\\Eloquent\\Model;
class Card extends Model
{
use HasFactory;
public string $title;
public string $description;
}
我的迁移:
<?php
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
/\*\*
\* Run the migrations.
\*/
public function up(): void
{
Schema::create('cards', function (Blueprint $table) {
$table-\>id();
$table-\>timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('cards');
}
};
AppServiceProvider.php 上的启动功能没有任何内容
如何解决这个问题? 编辑启动功能??运行特殊命令?
遇到的错误可能源于迁移文件尝试回滚数据库中不存在的表。以下是解决此问题的分步指南:
1。验证表是否存在: 首先,确认数据库中是否存在cards表。检查您的数据库架构以确保已创建表。如果不存在,请继续下一步。
2。修改迁移文件: 如果 cards 表不存在,请考虑注释掉与 Card 模型相关的迁移文件中 down() 方法中的内容。此步骤可防止回滚操作尝试删除不存在的表。
例如,暂时注释掉 down() 方法中的代码:
public function down(): void
{
// Schema::dropIfExists('cards');
}
运行回滚命令: 注释掉 down() 方法后,再次运行回滚命令:
php artisan migrate:rollback
3.数据库测试: 如果问题仍然存在,请考虑明确创建一个单独的或新的数据库以用于测试目的。迁移到这个新数据库以观察迁移运行是否没有错误。这种方法有助于隔离潜在的数据库特定问题。
遵循这些步骤应有助于识别和解决与迁移相关的问题。通过验证表是否存在、调整迁移文件以及可能在不同的数据库上进行测试,您可以解决问题并更有效地继续 Laravel 迁移。