【问题标题】:Table not found error while seeding DB in Laravel在 Laravel 中播种 DB 时未找到表错误
【发布时间】:2025-12-14 06:00:02
【问题描述】:

我正在使用 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 的建议,我的主 DatabaseSeeder 如下所示

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

角色用户模型

<?php

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

    protected $table='role_user';

}

角色用户播种器

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

请帮我解决这个问题。

【问题讨论】:

  • 为什么是role_user?不应该是user_roles吗?只是建议。
  • @majidarif 只是按照字母顺序。因为它是多对多的关系。

标签: php mysql laravel laravel-4


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我通过在我的 DatabaseSeeder.php 中创建一些 tweeks 来解决此问题。感谢@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;');
        }
    }
    

    【讨论】: