未找到基表或视图:1146表''不存在

时间:2015-09-26 01:16:08

标签: mysql database laravel laravel-5 seed

我正在尝试在这些任务中播放任务和npcs的多对多连接表...任务可以有很多npcs,并且NPC可以在许多任务中使用。我正在使用Laravel 5。

enter image description here

当播种Quest表时,我也播种了连接表,但是收到以下错误:

  

找不到基表或视图:1146表'clg_local.npc_quest'不存在

创建Quest和Quest_NPC表:

public function up()
{
    /*
     * Create quests table
     */
    Schema::create('quests', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('quest_name')->nullable();
        $table->unsignedInteger('reward_xp')->nullable();
        $table->string('reward_items')->nullable();
        $table->unsignedInteger('reward_money')->nullable();

    });

    /*
     * Create quests_npcs join table
     */
    Schema::create('quest_npc', function(Blueprint $table)
    {
        $table->increments('id');
        $table->unsignedInteger('quest_id')->nullable();
        $table->unsignedInteger('npc_id')->nullable();

    });

在另一个创建中,我指定了我的关系:

    Schema::table('quest_npc', function(Blueprint $table)
    {
        $table->foreign('quest_id')->references('id')->on('quests')->onDelete('cascade');
        $table->foreign('npc_id')->references('id')->on('npcs')->onDelete('cascade');
    });

显然我正在创建一个quest_npc表,但它正在寻找一个npc_quest表?

Quest seeder:

public function run()
{
    Eloquent::unguard();

    $quests = $this->createQuests();

    $npcs = Npc::all()->toArray();

    foreach ($quests as $quest) {

        $quest->npcs()->attach($npcs[rand(0, count($npcs) - 1)]['id']);
    }

private function createQuests()
{
    Quest::unguard();

    $quests = [];

    foreach (
        [
            [
                'quest_name' => 'Quest 1',
                'reward_xp' => 200,
                'reward_items' => null,
                'reward_money' => 200,
            ], ...

NPC模特:

public function npcs()
{
    return $this->belongsToMany(Npc::class);
}

任务模型:

public function quests()
{
    return $this->belongsToMany(Quest::class);
}

1 个答案:

答案 0 :(得分:3)

从文档中,Laravel'假设'表名是

  

派生自相关型号名称的字母顺序

所以在你的情况下,那是"为什么"。

您可以在belongsToMany来电中添加第二个参数,以指明您要使用的名称。例如:

public function quests()
{
    return $this->belongsToMany(Quest::class, 'quest_npc');
}

对两种关系执行以上操作

在我看来,坚持惯例,除非你需要一个理由不这样做。