在Laravel中播种DB时未找到表错误

时间:2014-09-15 09:53:08

标签: php mysql laravel laravel-4

我正在使用way / generators包在Laravel 4.2中生成数据透视表。我收到以下错误,指定Table 'pricom.roleuser' doesn't exist,但我的数据库中的表名是'pricom.role_user'。除了role_user表之外,所有其他迁移和种子都正常工作。

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

我的主数据库查看器如Jeff Way所建议的那样如下所示

<?php

/**
 * Class DatabaseSeeder
 */
class DatabaseSeeder extends Seeder
{

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


        $tables = [
            'Users',
            'Designations',
            'Departments',
            'News',
            'Organizations',
            'Roles',
            'RoleUser'
        ];

        Eloquent::unguard();

        DB::statement('SET FOREIGN_KEY_CHECKS=0;');

        foreach ($tables as $table) {
            DB::table($table)->truncate();
        }

        foreach ($tables as $table) {
            $this->call($table . 'TableSeeder');
        }

        DB::statement('SET FOREIGN_KEY_CHECKS=1;');
    }
}

RoleUser模型

<?php

class RoleUser extends \Eloquent {
    protected $fillable = [];

    protected $table='role_user';

}

RoleUser播种机

<?php

// Composer: "fzaninotto/faker": "v1.3.0"
use Faker\Factory as Faker;

class RoleUsersTableSeeder extends Seeder {

    public function run()
    {
        $faker = Faker::create();

        $roleUsers = [
            [
                'role_id'=>1,
                'user_id'=>1
            ],
            [
                'role_id'=>2,
                'user_id'=>2
            ],
            [
                'role_id'=>3,
                'user_id'=>3
            ]
        ];


        foreach ($roleUsers as $roleUser) {
            RoleUser::create($roleUser);
        }

        foreach(range(1, 300) as $index)
        {
            RoleUser::create([
                'role_id'=>4,
                'user_id'=>$index+3
            ]);
        }
    }
}

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试截断一个名为RoleUser的表,该表不存在。您需要从类中获取表的名称。尝试在数据库播种器中更改此位:

foreach ($tables as $table) {
        DB::table(with(new $table)->getTable())->truncate();
}

答案 1 :(得分:0)

我通过在DatabaseSeeder.php中制作一些tweek来解决这个问题。感谢@RobbieP的建议。

<?php

/**
 * Class DatabaseSeeder
 */
class DatabaseSeeder extends Seeder
{

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $tables = [
            'User',
            'Designation',
            'Department',
            'News',
            'Organization',
            'Role',
            'RoleUser'
        ];

        Eloquent::unguard();

        DB::statement('SET FOREIGN_KEY_CHECKS=0;');

        foreach ($tables as $table) {
            DB::table(with(new $table)->getTable())->truncate();
        }

        foreach ($tables as $table) {
            $this->call(str_plural($table) . 'TableSeeder');
        }

        DB::statement('SET FOREIGN_KEY_CHECKS=1;');
    }
}