php - queryexception - base table or view not found laravel
Laravel 4 migrate base table not found (3)
Estoy tratando de hacer el siguiente tutorial: https://medium.com/on-coding/e8d93c9ce0e2
Cuando se trata de correr:
php artisan migrate
Me aparece el siguiente 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 (
))
La conexión de la base de datos funciona, la tabla de migraciones se creó con éxito. El nombre de la base de datos se modificó como se puede ver en el mensaje de error.
Lo que es bastante extraño para mí es que intenta alterar la tabla, que no existe, y no crearla.
Aquí están mis otros archivos, como UserModel, Seeder, Migtation y 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'');
}
}
Configuración de base de datos:
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,
),
),
);
Espero que alguien pueda darme una pista aquí.
Saludos cordiales ihkawiss
A veces es causado por comandos artesanales personalizados. Algunos de estos comandos pueden iniciar pocas clases. Y debido a que hicimos una reversión, no se puede encontrar la tabla. Verifica tus comandos artesanales personalizados. Puede comentar las líneas que están causando el desencadenador. Ejecute el comando php artesanal migrate y luego descomente. Esto es lo que tenía que hacer.
En su archivo de migración CreateUserTable
, en lugar de Schema::table
, debe usar Schema::create
.
La Schema::table
se usa para modificar una tabla existente y Schema::create
se usa para crear una nueva tabla.
Verifique la documentación:
- http://laravel.com/docs/schema#creating-and-dropping-tables
- http://laravel.com/docs/schema#adding-columns
Entonces su migración de usuario será:
<?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");
}
}
La causa subyacente de esto puede ser si la sintaxis utilizada para crear la migración php artisan migrate ...
no es del todo correcta. En este caso, el --create
no se seleccionará correctamente y verá la Schema::table
lugar del Schema::create
esperado. Cuando se genera un archivo de migración como este, es posible que también le falten algunos de los otros marcadores para una migración de creación, como $table->increments(''id'');
y $table->timestamps();
Por ejemplo, estos dos comandos no crearán un archivo de migración de tabla de creación como es de esperar:
php artisan migrate:make create_tasks_table --table="tasks" --create
php artisan migrate:make create_tasks2_table --table=tasks2 --create
Sin embargo, el comando no fallará con un error. En cambio, laravel creará un archivo de migración usando Schema::table
Siempre utilizo la sintaxis completa al crear un nuevo archivo de migración como este:
php artisan migrate:make create_tasks_table --table=tasks --create=tasks
para evitar cualquier problema como este.