【问题标题】:Cant create table in laravel无法在laravel中创建表
【发布时间】:2014-10-16 07:52:36
【问题描述】:

我有这个问题,我不知道在 laravel (php artisan) 中工作的迁移和种子数据库,我有这个模型:

use Illuminate\Auth\UserInterface;


class User extends Eloquent implements UserInterface {
    public function getAuthIdentifier() {
        return $this->getKey();
    }
    public function getAuthPassword() {
        return $this->password;
    }
    public function cats(){
        return $this->hasMany('Cat');
    }
    public function owns(Cat $cat){
        return $this->id == $cat->owner;
    }
    public function canEdit(Cat $cat){
        return $this->is_admin or $this->owns($cat);
    }
    public function getRememberToken(){
        return $this->remember_token;
    }
    public function setRememberToken($value){
        $this->remember_token = $value;
    }
    public function getRememberTokenName(){
        return 'remember_token';
    }

}

这是我的迁移文件:

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

class CreateUser extends Migration {

    public function up()
    {
        Schema::create('users', function($table){
            $table->increments('id');
            $table->string('username');
            $table->string('password');
            $table->boolean('is_admin');
            $table->timestamps();
        });

        Schema::table('cats', function($table){
            $table->integer('user_id')->nullable()->references('id')->on('users');
        });
    }


    public function down()
    {
        Schema::table('cats', function($table){
            $table->dropForeign('cats_user_id_foreign');
            $table->dropColumn('user_id');
        });
        Schema::drop('users');
    }

}

最后是我的播种代码:

class UsersTableSeeder extends Seeder {
    public function run(){

        DB::table('users')->delete();

        User::create(array(
            'username' =>'admin', 'password' =>Hash::make('hunter2'), 'is_admin' =>true
        ));

        User::create(array(
           'username'=>'scott', 'password' =>Hash::make('tiger'), 'is_admin' => false
        ));
    }
}

当我尝试迁移这个时,我收到了这条消息:

$php artisan migrate --path="foo"

Nothing to migrate

然后当我尝试:

$php artisan db:seed

此消息显示给我:

[PDOException]
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.users' doesn't exist

请帮帮我,谢谢你:)

和config/database.php:

return array(
'fetch' => PDO::FETCH_CLASS,
'default' => 'mysql',
'connections' => array(

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

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

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

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

),


'migrations' => 'migrations',



'redis' => array(

    'cluster' => false,

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

),

);

【问题讨论】:

  • 你能告诉我们你的database.php吗? (删除密码;))
  • 你能告诉我们你的文件夹结构吗? artisan似乎找不到迁移文件。
  • @Jerodev in database\migration 我在数据库\seeds 中有那个迁移文件我有我的种子代码,在模型中我有模型代码
  • 在这种情况下,只需像 @MarcinNabialek 所说的那样运行 php artisan migrate。您不需要添加--path 参数。

标签: php mysql laravel laravel-4 artisan-migrate


【解决方案1】:

您似乎在foo 目录中没有任何迁移文件,或者您已经启动了一些迁移(您是否使用来自 2 个目录的迁移?)。

确保您在foo 中拥有您的迁移文件,并且您之前没有运行任何迁移。

编辑

如果你在默认文件夹中有你的迁移,你应该简单地运行:

php artisan migrate

不使用--path="foo"

EDIT2

你可能应该改变:

$table->integer('user_id')->nullable()->references('id')->on('users');

进入:

$table->dropColumn('user_id');
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('users');

【讨论】:

  • @Nabialek:我第一次在没有任何路径的情况下进行 php artsian 迁移,这个推荐运行并尝试迁移我的最后一个数据库,之后我尝试使用路径
  • @ArmanKuroKy 你什么时候有你的迁移文件?你有它在foo 目录吗?文件名是什么?您是否已经在数据库中创建了migrations 表?
  • @Nabialek 让我先说一下,我使用这个命令'php artisan migrate:make create_users',这个推荐在迁移文件夹中为我带来一个 2014_10_15_201401_create_user.php,然后我编写我的代码 init并使用 'php artisan migrate --path=this file path' 并没有出现任何要迁移的内容
  • @ArmanKuroKy 如果文件是在默认迁移文件夹中创建的(它是app/database/migrations,你应该只运行php artisan migrate而不使用--path="foo"。所以尝试只运行php artisan migrate
  • @Nabialek 我试试这个,但这个命令尝试迁移我最后一个迁移文件,即该文件夹中的 2014_10_14_114343_add_cats_and_breeds_table.php
【解决方案2】:

可能是当您第一次尝试迁移时,它会将迁移记录到您的迁移表中。检查你的迁移表,让我知道你看到了什么。

【讨论】:

  • 是的,如果您看到有人说您的 users 表已迁移,那么这意味着 artisan 认为它已经迁移,您可以做些什么来解决它是删除迁移表并重新运行所有迁移
  • 您的迁移文件在哪里。编辑:尝试运行 composer dump-autoload 然后尝试再次运行 php artisan migrate
  • php artsian migrate 尝试迁移我的最后一个文件而不是这个文件,我不知道为什么,在此之后我尝试将路径传递给 migrate
  • 它应该可以工作,我能想到的唯一问题是它第一次迁移失败,但无论如何都记录了它。检查 mysql 服务器中的每个数据库并查找名为 migrations 的表。
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 2015-06-27
  • 2020-09-17
  • 2016-06-09
  • 2020-09-26
  • 2019-11-14
  • 1970-01-01
  • 2017-01-04
相关资源
最近更新 更多