web-dev-qa-db-fra.com

Laravel 4 migrer la table de base introuvable

J'essaie de faire le tutoriel suivant: https://medium.com/on-coding/e8d93c9ce0e2

Quand il s'agit de courir:

php artisan migrate

J'obtiens l'erreur suivante:

[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 (                                                       
))

La connexion à la base de données fonctionne, la table des migrations a été créée avec succès. Le nom de la base de données a été modifié comme vous pouvez le voir dans le message d'erreur.

Ce qui est assez étrange pour moi, c'est qu'il essaie de modifier la table - qui n'existe pas - et de ne pas la créer.

Voici mes autres fichiers, comme UserModel, Seeder, Migtation et 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');
}

}

Configuration de la base de données:

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,
    ),

),

);

J'espère que quelqu'un pourra me donner un indice ici.

Cordialement ihkawiss

23
ihkawiss

Dans votre fichier de migration CreateUserTable, au lieu de Schema::table vous devez utiliser Schema::create.

Le Schema::table est utilisé pour modifier une table existante et le Schema::create est utilisé pour créer une nouvelle table.

Consultez la documentation:

Votre migration utilisateur sera donc:

<?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");
    }

}
92
devo

La cause sous-jacente de ceci peut être si la syntaxe utilisée pour créer la migration php artisan migrate ... N'est pas tout à fait correcte. Dans ce cas, le --create Ne sera pas récupéré correctement et vous verrez le Schema::table Au lieu du Schema::create Attendu. Lorsqu'un fichier de migration est généré comme celui-ci, il se peut également qu'il manque certains des autres marqueurs pour une migration de création tels que $table->increments('id'); et $table->timestamps();

Par exemple, ces deux commandes ne créeront pas de fichier de migration de création de table comme vous pouvez vous y attendre:

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

Cependant, la commande n'échouera pas avec une erreur. Au lieu de cela laravel créera un fichier de migration en utilisant Schema::table

J'utilise toujours la syntaxe complète lors de la création d'un nouveau fichier de migration comme celui-ci:

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

pour éviter tout problème comme celui-ci.

2
SnapShot

Parfois, il est causé par des commandes artisanales personnalisées. Certaines de ces commandes peuvent initier quelques classes. Et parce que nous avons fait une restauration, la table est introuvable. Vérifiez vos commandes artisanales personnalisées. Vous pouvez commenter les lignes qui provoquent le déclenchement. Exécutez la commande php artisan migrate, puis décommentez. Voilà ce que je devais faire.

1
Jeetendra Pujari