因此,我正在为我正在创建的Web应用程序创建API,并且我试图将其保留在Eloquent 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();
但是在一个声明中,好像它是一个大的连接查询。但是,我不确定Eloquent ORM是否涵盖了类似的测试用例。
有没有人做过这样的事情?我可以通过一些非常糟糕的实践或只是编写原始SQL查询来完成这项工作,但我只是想知道是否有更有说服力的方法来做到这一点。
答案 0 :(得分:10)
Eloquent允许您轻松地执行此操作:)
https://laravel.com/docs/5.2/eloquent-relationships#eager-loading
如果您还需要与每个日志相关的用户,您只需要像这样急切加载
$sites = Site::with('log.user')->get();
答案 1 :(得分:2)
类似的东西:
Site::with('log.user')->get();
Laravel 5.2 Docs - Eloquent - Relationships - Eager Loading - Nested Eager Loading
你最终得到的结构如下:
Site
log: [
SiteLog
User
SiteLog
User
...
]