数据透视表上的HasMany使用错误的ID

时间:2019-02-10 21:38:41

标签: php laravel eloquent

我在ManyToManyElection之间建立了Party关系,以将政党与多个选举联系起来。

public function parties(): BelongsToMany
{
    return $this
       ->belongsToMany(Party::class)
       ->using(ElectionParty::class)
       ->withPivot('has_no_answers', 'published', 'program_pdf', 'program', 'id');
}

在数据透视表election_party上,我添加了一个自动递增的id

各方可以为每次选举提供答案,因此,我在数据透视表上创建了hasManyAnswer的{​​{1}}关系

electionparty_id

现在,要获得答案,或者在这种情况下,这很重要,我可以在Blade中执行以下操作:

class ElectionParty extends Pivot
{
  public function answers(): HasMany
  {
    return $this->hasMany(Answer::class);
  }
}

但是,这是行不通的,因为它不会尝试通过数据透视表ID(我认为应该是选举ID)来获得答案:

  

SQLSTATE [42703]:未定义的列:7错误:列answer.election_id不存在线1:从“答案”中选择*,其中“答案”。“ election_id” = $ 1 a ... ^提示:也许您的意思是引用“ answers.question_id”列。 (SQL:从“答案”中选择*,其中“答案”。“ election_id” = 16并且“答案”。“ election_id”不为空)

我在这里错过了什么吗?还是没有做应该做的事情?

1 个答案:

答案 0 :(得分:0)

在枢轴模型中,默认键的生成方式有所不同。指定外键:

class ElectionParty extends Pivot
{
    public function answers(): HasMany
    {
        return $this->hasMany(Answer::class, 'electionparty_id');
    }
}