我有两个模型。 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”。是什么告诉雄辩者在急切加载时应为外键寻找的名称?我可以告诉它使用什么还是必须围绕它的先入之见来设计数据库?
答案 0 :(得分:2)
它正在寻找email_template_id
,因为它根据关系的名称生成外键名称。在这种情况下,emailTemplate
变为email_template_id
。您可以通过两种方法解决此问题。
更改关系名称
您只需将方法的名称从emailTemplate
更改为template
。
OR
指定密钥名称
您可以在关系上指定键名。您可以将第二个参数传递给belongsTo
方法。它将变成:
return $this->belongsTo('App\Model\EmailTemplate', 'template_id');