我对Laravel 4及其出色的Eloquent ORM都很陌生。我有四个表,如:
Sector (iSectorCode);
MailingSector (iSectorCode, iMailingCode);
Mailing (iMailingCode);
MailingLanguages(iMailingCode, sTranslation);
我有扇区ID,我希望将所有邮件关联起来。但我还需要访问包含特定邮件的内容翻译的MailingLanguages表。
所以现在我可以获得特定部门的所有邮件:
Sector::find($iSectorCode)->mailings()->get()->toArray();
但即使定义了Mailing和MailingLanguages之间的关系,Sector::find($iFormSectorCode)->mailings()->mailingsLanguages()->get()->toArray();
也不起作用:
public function mailingsLanguages(){
return $this->hasMany('MailingLanguage','iMailingCode');
}
所以我不知道如何为特定的部门获取特定邮件的所有翻译。
答案 0 :(得分:1)
假设您已在所有表之间设置关系,您可以请求使用初始请求抓取它们。
$sector = Sector::with('mailings', 'mailings.languages')->find($iSectorCode);
这将创建一个很好的联接,其中包含Mailing
的相关记录,然后是MailingLanguage
的相关记录,以及请求的Sector
。
上面的示例假设Sector
有一个名为mailings
的关系,而Mailing
有一个名为languages
的关系。
您也可以在事后加载它们。
$sector = Sector::find($iSectorCode);
$sector->load(['mailings', 'mailings.languages']);
我建议使用laravel提供的findOrFail
方法。
try {
$sector = Sector::with(['mailings', 'mailings.langauges'])
->findOrFail($iSectorCode);
} catch(ModelNotFoundException $e) {
// do something here
}
这样可以省去$sector
是否返回任何内容,因为会抛出异常。
希望有所帮助。