php 找不到 Laravel 4 迁移基表

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/19265202/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 19:09:01  来源:igfitidea点击:

Laravel 4 migrate base table not found

phpmysqllaravellaravel-4

提问by ihkawiss

I'm trying to make following tutorial: https://medium.com/on-coding/e8d93c9ce0e2

我正在尝试制作以下教程:https: //medium.com/on-coding/e8d93c9ce0e2

When it comes to run:

运行时:

php artisan migrate

I get following error:

我收到以下错误:

[Exception]                                                                        
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.user' doesn't   
exist (SQL: alter table `user` add `id` int unsigned not null auto_increment prim  
ary key, add `username` varchar(255) null, add `password` varchar(255) null, add   
`email` varchar(255) null, add `created_at` datetime null, add `updated_at` datet  
ime null) (Bindings: array (                                                       
))

Database connection is working, the migrations table was created successfully. Database name was changed as you can see in the error message.

数据库连接正常,迁移表创建成功。正如您在错误消息中看到的那样,数据库名称已更改。

Whats quite strange to me, is that it tries to alter the table - which doesn't exists - and not to create it.

对我来说很奇怪的是,它试图更改不存在的表,而不是创建它。

Here are my other files, like UserModel, Seeder, Migtation and DB Config.

这是我的其他文件,如 UserModel、Seeder、Migtation 和 DB Config。

CreateUserTable:

创建用户表:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration {

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('user', function(Blueprint $table)
    {

        $table->increments("id");

        $table
            ->string("username")
            ->nullable()
            ->default(null);
        $table
            ->string("password")
            ->nullable()
            ->default(null);
        $table
            ->string("email")
            ->nullable()
            ->default(null);
        $table
            ->dateTime("created_at")
            ->nullable()
            ->default(null);
        $table
            ->dateTime("updated_at")
            ->nullable()
            ->default(null);

    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('user', function(Blueprint $table)
    {
        Schema::dropIfExists("user");
    });
}

}

UserModel:

用户模型:

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'user';

/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
protected $hidden = array('password');

/**
 * Get the unique identifier for the user.
 *
 * @return mixed
 */
public function getAuthIdentifier()
{
    return $this->getKey();
}

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->password;
}

/**
 * Get the e-mail address where password reminders are sent.
 *
 * @return string
 */
public function getReminderEmail()
{
    return $this->email;
}

}

UserSeeder:

用户播种机:

class UserSeeder extends DatabaseSeeder
{
public function run()
{
    $users = [
        [
            "username" => "ihkawiss",
            "password" => Hash::make("123456"),
            "email"    => "[email protected]"
        ]
    ];

    foreach ($users as $user)
    {
        User::create($user);
    }
}
}

DatabaseSeeder:

数据库浏览器:

class DatabaseSeeder extends Seeder {

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    Eloquent::unguard();

    $this->call('UserSeeder');
}

}

Database Config:

数据库配置:

return array(

/*
|--------------------------------------------------------------------------
| PDO Fetch Style
|--------------------------------------------------------------------------
|
| By default, database results will be returned as instances of the PHP
| stdClass object; however, you may desire to retrieve records in an
| array format for simplicity. Here you can tweak the fetch style.
|
*/

'fetch' => PDO::FETCH_CLASS,

/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/

'default' => 'mysql',

/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/

'connections' => array(

    'sqlite' => array(
        'driver'   => 'sqlite',
        'database' => __DIR__.'/../database/production.sqlite',
        'prefix'   => '',
    ),

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'laravel',
        'username'  => 'root',
        'password'  => '',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    'pgsql' => array(
        'driver'   => 'pgsql',
        'host'     => 'localhost',
        'database' => 'database',
        'username' => 'root',
        'password' => '',
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ),

    'sqlsrv' => array(
        'driver'   => 'sqlsrv',
        'host'     => 'localhost',
        'database' => 'database',
        'username' => 'root',
        'password' => '',
        'prefix'   => '',
    ),

),

/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk have not actually be run in the databases.
|
*/

'migrations' => 'migrations',

/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer set of commands than a typical key-value systems
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

'redis' => array(

    'cluster' => true,

    'default' => array(
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ),

),

);

Hope somebody can give me a hint here.

希望有人可以在这里给我一个提示。

Best regards ihkawiss

最好的问候 ihkawiss

回答by devo

In your CreateUserTablemigration file, instead of Schema::tableyou have to use Schema::create.

在您的CreateUserTable迁移文件中,Schema::table您不必使用Schema::create.

The Schema::tableis used to alter an existing table and the Schema::createis used to create new table.

Schema::table用于改变现有的表和Schema::create用于创建新表。

Check the documentation:

检查文档:

So your user migration will be:

因此,您的用户迁移将是:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('user', function(Blueprint $table) {
        {

            $table->increments("id",true);
            $table->string("username")->nullable()->default(null);
            $table->string("password")->nullable()->default(null);
            $table->string("email")->nullable()->default(null);
            $table->timestamps();

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists("user");
    }

}

回答by SnapShot

The underlying cause of this may be if the syntax used for creating the migration php artisan migrate ...is not quite correct. In this case the --createwill not get picked up properly and you will see the Schema::tableinstead of the expected Schema::create. When a migration file is generated like this you might also be missing some of the other markers for a create migration such as the $table->increments('id');and $table->timestamps();

造成这种情况的根本原因可能是用于创建迁移的语法php artisan migrate ...不太正确。在这种情况下,--create将不会被正确拾取,您将看到Schema::table而不是预期的Schema::create。当像这样生成迁移文件时,您可能还会丢失一些其他用于创建迁移的标记,例如$table->increments('id');$table->timestamps();

For example, these two commands will not create a create table migration file as you might expect:

例如,这两个命令不会像您期望的那样创建创建表迁移文件:

php artisan migrate:make create_tasks_table --table="tasks" --create
php artisan migrate:make create_tasks2_table --table=tasks2 --create

However, the command will not fail with an error. Instead laravel will create a migration file using Schema::table

但是,该命令不会因错误而失败。相反,laravel 将使用创建一个迁移文件Schema::table

I always just use the full syntax when creating a new migration file like this:

在创建这样的新迁移文件时,我总是只使用完整的语法:

php artisan migrate:make create_tasks_table --table=tasks --create=tasks 

to avoid any issues like this.

以避免任何此类问题。

回答by Jeetendra Pujari

Sometimes it is caused by custom artisan commands. Some of these commands might initiate few classes. And because we did a rollback, the table cannot be found. Check you custom artisan commands. You can comment out the lines which are causing the trigger. Run the php artisan migrate command and then uncomment. This is what I had to do.

有时它是由自定义工匠命令引起的。其中一些命令可能会启动几个类。并且因为我们做了回滚,所以找不到表。检查您的自定义工匠命令。您可以注释掉导致触发器的行。运行 php artisan migrate 命令,然后取消注释。这是我必须做的。