Mysql 我试图让雄辩而急切的加载工作,但它一直在hasMany表中寻找不正确的列名
我有两个模型。EmailTemplate和EmailBody。EmailBody具有EmailTemplate id的外键。在我的型号中,我有: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
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');