未找到 Laravel 4 迁移基表
Posted
技术标签:
【中文标题】未找到 Laravel 4 迁移基表【英文标题】:Laravel 4 migrate base table not found 【发布时间】:2013-10-16 09:48:58 【问题描述】:我正在尝试制作以下教程:https://medium.com/on-coding/e8d93c9ce0e2
当谈到运行时:
php artisan migrate
我收到以下错误:
[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 (
))
数据库连接正常,迁移表创建成功。如您在错误消息中所见,数据库名称已更改。
对我来说很奇怪的是,它试图改变表——它不存在——而不是创建它。
这是我的其他文件,例如 UserModel、Seeder、Miggation 和 DB Config。
创建用户表:
<?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");
);
用户模型:
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;
用户种子:
class UserSeeder extends DatabaseSeeder
public function run()
$users = [
[
"username" => "ihkawiss",
"password" => Hash::make("123456"),
"email" => "ihkawiss@domain.com"
]
];
foreach ($users as $user)
User::create($user);
数据库播种机:
class DatabaseSeeder extends Seeder
/**
* Run the database seeds.
*
* @return void
*/
public function run()
Eloquent::unguard();
$this->call('UserSeeder');
数据库配置:
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,
),
),
);
希望有人可以在这里给我一个提示。
最好的问候 ihkawiss
【问题讨论】:
我现在已经设法让它工作了,但不幸的是只能通过一种解决方法。我创建了一个表用户,添加了一个不是由迁移创建的列,运行 php artisan migrate 。之后我删除了创建的列。 我偶然发现了同样的事情。 migration:create 使用“Schema::table”,需要将其更改为“Schema:create”。我认为这些模板可以在某处进行修改。 【参考方案1】:在您的CreateUserTable
迁移文件中,您必须使用Schema::create
而不是Schema::table
。
Schema::table
用于更改现有表,Schema::create
用于创建新表。
查看文档:
http://laravel.com/docs/schema#creating-and-dropping-tables http://laravel.com/docs/schema#adding-columns所以您的用户迁移将是:
<?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");
【讨论】:
谢谢!为我工作!【参考方案2】:这种情况的根本原因可能是用于创建迁移php artisan migrate ...
的语法不完全正确。在这种情况下,--create
将无法正确获取,您将看到Schema::table
而不是预期的Schema::create
。当像这样生成迁移文件时,您可能还缺少一些其他用于创建迁移的标记,例如 $table->increments('id');
和 $table->timestamps();
例如,这两个命令不会像您预期的那样创建创建表迁移文件:
php artisan migrate:make create_tasks_table --table="tasks" --create
php artisan migrate:make create_tasks2_table --table=tasks2 --create
但是,该命令不会因错误而失败。相反,laravel 将使用Schema::table
创建一个迁移文件
在创建新的迁移文件时,我总是只使用完整的语法,如下所示:
php artisan migrate:make create_tasks_table --table=tasks --create=tasks
以避免任何此类问题。
【讨论】:
【参考方案3】:有时它是由自定义工匠命令引起的。其中一些命令可能会启动一些类。而且因为我们进行了回滚,所以找不到表。检查您的自定义工匠命令。您可以注释掉导致触发的行。运行 php artisan migrate 命令,然后取消注释。这是我必须做的。
【讨论】:
以上是关于未找到 Laravel 4 迁移基表的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [42S02]:未找到基表或视图:1146 表 'laravel_abonamenty2.currencies' 不存在
SQLSTATE [42S02]:未找到基表或视图:1146表'softwareproject.o_r_f_o_l_s'在laravel中不存在错误