Mysql 我试图让雄辩而急切的加载工作,但它一直在hasMany表中寻找不正确的列名

Mysql 我试图让雄辩而急切的加载工作,但它一直在hasMany表中寻找不正确的列名,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有两个模型。EmailTemplate和EmailBody。EmailBody具有EmailTemplate id的外键。在我的型号中,我有: class EmailTemplate extends Model <snip> { public fuction emailBody() return $this->hasMany('App\Models\EmailBody'); } class EmailBody extends Model <snip

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

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\u template\u id列。email\u body表中的外键简称为“template\u id”。什么告诉雄辩的名称,它应该寻找外键时,它是急于加载?我可以告诉它使用什么,或者我必须围绕它的先入之见设计我的数据库吗?

它正在寻找
电子邮件\u模板\u id
,因为它根据关系的名称生成外键名称。在这种情况下,
emailTemplate
变为
email\u template\u id
。您有两个选项来解决此问题

更改关系名称

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

指定键名

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

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

它正在查找
email\u template\u id
,因为它根据关系的名称生成外键名称。在这种情况下,
emailTemplate
变为
email\u template\u id
。您有两个选项来解决此问题

更改关系名称

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

指定键名

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

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