PHP artisan 迁移不创建新的 table
PHP artisan migrate not creating new table
我是 Laravel
的新手,我正在关注 Laravel Documentations
以及一些教程视频。但是,我在我的本地 CMD prompt
中 运行 宁这个 php artisan migrate
代码,它没有在 phpmyadmin
中创建 Database Table
。 Whosebug
中还有其他几个与此相关的类似主题,但 none 解决了我的问题。请不要标记此重复项。
好的,就是这样。我运行这个代码
php artisan make:migration create_student_table --create=student
并且新文件在迁移文件夹中创建为 2016_04_08_061507_create_student_table.php
然后在那个文件中我 运行 这个 code
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateStudentTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('student', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('name', 20);
$table->string('email', 255);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('student');
}
}
然后在 cmd
我 运行 php artisan migrate
但它没有创建 student
table。相反,它显示此消息
[PDOException] SQLSTATE[42S01]: Base table or view already exists:
1050 Table 'users' already exists
我几天前使用与上述类似的方法创建了 users
table。但是没有创建新的 student
table。我在这里错过了什么吗?
提前致谢。
这意味着 Laravel 正在首先尝试 运行 users
table 迁移。如果您正在开发中并且不需要保留数据,您可以删除 users
table 然后 运行 php artisan migrate
编辑
move out already ran migrations from database\migrations folder,
before running new migration files. after running the new migrations
move back in the past migrations where it was before.
这意味着您已经 运行 php artisan migrate
一次并且 table 已经存在于数据库中。有时如果 artisan 在说谎,你需要做一个 composer dump-autoload
。
因此您需要回滚编辑前的最后一次更改和 运行宁 php artisan migrate
。回滚你可以使用 php artisan migrate:rollback
此外,如果您想删除所有更改,您可以 运行 php artisan migrate:reset
。
有php artisan migrate --force
强制运行迁移。
完成所有这些步骤后,如果无法运行 迁移,如果是开发环境,则删除数据库再次创建数据库并运行 php artisan migrate
。
你的数据库已经有这个 table,只需删除它并让 laravel 由 artisan 创建。
您有用户迁移权限吗?如果是这样,请在以下位置插入您的用户创建 table:
if(!Schema::hasTable('users')) ...
我的 Laravel 设置(mac os Sierra 10.12.16)和将 MAMP 与 atom 一起使用时遇到了类似的问题,直到我找到最终的解决方案接下来的步骤。
在设置我的本地环境时,我发现使用以下步骤可以防止以后出现迁移问题,
IN AppServiceProvider.php add the following code:
use Illuminate\Support\Facades\Schema;
public function boot()
{
//
Schema::defaultStringLength(191);
}
then in database.php:
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
THEN FINALLY IN .env:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=
DB_DATABASE=hackable
DB_USERNAME=root
DB_PASSWORD=root
希望这对某些人有所帮助,因为我花了几天时间才最终正确设置:)
这对我有用:从数据库中删除所有表并 运行
php artisan migrate.
有时,如果您使用的是 MAMP 服务器,您可能会因为数据库连接而收到此错误。这是因为端口号,通常在使用 MAMP 时,mysql 数据库的端口号是 8889,你必须在你的配置和 运行 你的 artisan 命令中更改它肯定会工作。
何必呢?
您可以使用 php artisan migrate:fresh
这将忽略当前用户 table 并从新创建 tables。
当我遇到这个问题时,我犯了一个错误
$table-> id();
但应该是
$table->bigIncrements('id');
我是 Laravel
的新手,我正在关注 Laravel Documentations
以及一些教程视频。但是,我在我的本地 CMD prompt
中 运行 宁这个 php artisan migrate
代码,它没有在 phpmyadmin
中创建 Database Table
。 Whosebug
中还有其他几个与此相关的类似主题,但 none 解决了我的问题。请不要标记此重复项。
好的,就是这样。我运行这个代码
php artisan make:migration create_student_table --create=student
并且新文件在迁移文件夹中创建为 2016_04_08_061507_create_student_table.php
然后在那个文件中我 运行 这个 code
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateStudentTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('student', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('name', 20);
$table->string('email', 255);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('student');
}
}
然后在 cmd
我 运行 php artisan migrate
但它没有创建 student
table。相反,它显示此消息
[PDOException] SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists
我几天前使用与上述类似的方法创建了 users
table。但是没有创建新的 student
table。我在这里错过了什么吗?
提前致谢。
这意味着 Laravel 正在首先尝试 运行 users
table 迁移。如果您正在开发中并且不需要保留数据,您可以删除 users
table 然后 运行 php artisan migrate
编辑
move out already ran migrations from database\migrations folder, before running new migration files. after running the new migrations move back in the past migrations where it was before.
这意味着您已经 运行 php artisan migrate
一次并且 table 已经存在于数据库中。有时如果 artisan 在说谎,你需要做一个 composer dump-autoload
。
因此您需要回滚编辑前的最后一次更改和 运行宁 php artisan migrate
。回滚你可以使用 php artisan migrate:rollback
此外,如果您想删除所有更改,您可以 运行 php artisan migrate:reset
。
有php artisan migrate --force
强制运行迁移。
完成所有这些步骤后,如果无法运行 迁移,如果是开发环境,则删除数据库再次创建数据库并运行 php artisan migrate
。
你的数据库已经有这个 table,只需删除它并让 laravel 由 artisan 创建。
您有用户迁移权限吗?如果是这样,请在以下位置插入您的用户创建 table:
if(!Schema::hasTable('users')) ...
我的 Laravel 设置(mac os Sierra 10.12.16)和将 MAMP 与 atom 一起使用时遇到了类似的问题,直到我找到最终的解决方案接下来的步骤。
在设置我的本地环境时,我发现使用以下步骤可以防止以后出现迁移问题,
IN AppServiceProvider.php add the following code:
use Illuminate\Support\Facades\Schema;
public function boot()
{
//
Schema::defaultStringLength(191);
}
then in database.php:
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
THEN FINALLY IN .env:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=
DB_DATABASE=hackable
DB_USERNAME=root
DB_PASSWORD=root
希望这对某些人有所帮助,因为我花了几天时间才最终正确设置:)
这对我有用:从数据库中删除所有表并 运行
php artisan migrate.
有时,如果您使用的是 MAMP 服务器,您可能会因为数据库连接而收到此错误。这是因为端口号,通常在使用 MAMP 时,mysql 数据库的端口号是 8889,你必须在你的配置和 运行 你的 artisan 命令中更改它肯定会工作。
何必呢?
您可以使用 php artisan migrate:fresh
这将忽略当前用户 table 并从新创建 tables。
当我遇到这个问题时,我犯了一个错误
$table-> id();
但应该是
$table->bigIncrements('id');