我正在尝试让Eloquent急切的加载工作,但是它一直在hasMany表中寻找不正确的列名。

时间:2018-10-15 13:53:08

标签: mysql laravel eloquent

我有两个模型。 EmailTemplate和EmailBody。 EmailBody具有EmailTemplate id的外键。在我的模型中,我有:

//Pattern B

export class Foo {
  constructor() {
    doSomething();
  }
}
// non-exported function in module scope
function doSomething() { }

当我尝试通过包含“-> with('emailbody')”子句来贪婪地加载模板时,出现以下错误:

class EmailTemplate extends Model
<snip>
{
  public fuction emailBody()
     return $this->hasMany('App\Models\EmailBody'); 
}



class EmailBody extends Model
<snip>
public function emailTemplate()
{
  return $this->belongsTo('App\Model\EmailTemplate');
}

我不明白为什么要查找email_template_id列。 email_bodys表中的外键简称为“ template_id”。是什么告诉雄辩者在急切加载时应为外键寻找的名称?我可以告诉它使用什么还是必须围绕它的先入之见来设计数据库?

1 个答案:

答案 0 :(得分:2)

它正在寻找email_template_id,因为它根据关系的名称生成外键名称。在这种情况下,emailTemplate变为email_template_id。您可以通过两种方法解决此问题。

更改关系名称

您只需将方法的名称从emailTemplate更改为template

OR

指定密钥名称

您可以在关系上指定键名。您可以将第二个参数传递给belongsTo方法。它将变成:

return $this->belongsTo('App\Model\EmailTemplate', 'template_id');