Laravel雄辩的ORM - 与语句嵌套
问题描述:
因此,我正在为我创建的Web应用程序创建一个API,并且试图将它保留在Eloquent ORM中。还有,我要来一次亲子关系:Laravel雄辩的ORM - 与语句嵌套
用户 - >网站日志 - >站点
站点类代码:
class Site extends Model {
public function log() {
return $this->hasMany('App\SiteLog', 'site_id', 'id');
}
}
SiteLog类代码:
class SiteLog extends Model
{
public function site()
{
return $this->belongsTo('App\Site', 'site_id', 'id');
}
public function user()
{
return $this->belongsTo('App\User', 'user_id', 'id');
}
}
当我使用以下实例化SiteLog类时:
$sites = Site::with('log')->get();
当我使用jQuery进行GET请求时,我得到了所有网站以及它们内部的对象数组,其中包含网站各个日志的所有数据。这正是我想要的。但是,我想更进一步,让用户知道日志与哪个关联。
有点像如何做到这一点的工作:
SiteLog::with('user')->get();
但都在一个声明,如果它是一个大的连接查询。然而,我不确定这个雄辩的ORM是否涵盖了这样的测试用例。
有没有人做过这样的事情?我可以用一些非常冒险的做法来完成这项工作,或者只是写一个原始的SQL查询,但我只是想知道是否有更加雄辩的方式来做到这一点。
答
雄辩允许你这样做,很容易:)
https://laravel.com/docs/5.2/eloquent-relationships#eager-loading
如果您还需要与各相关用户日志,你只需要急于负载像这样
$sites = Site::with('log.user')->get();
答
喜欢的东西:
Site::with('log.user')->get();
Laravel 5.2 Docs - Eloquent - Relationships - Eager Loading - Nested Eager Loading
你最终会得到一个结构是这样的:
Site
log: [
SiteLog
User
SiteLog
User
...
]
如何获得最后一个对象'User'从嵌套链? – Darama