Laravel 5 Laravel从嵌套关系中检索特定字段

Laravel 5 Laravel从嵌套关系中检索特定字段,laravel-5,eloquent,Laravel 5,Eloquent,我有一些嵌套关系, 以下是我的模型: 文章,线程和书页。 以及他们之间的关系: 发布 类后扩展模型 { 公共函数线程(){ 返回$this->belongsTo('App\Thread'); } } 线程 类线程扩展模型 { 公共功能书页(){ 返回$this->belongsTo('App\BookPage'); } 公共职能职位(){ 返回$this->hasMany('App\Post'); } } 书页 类BookPage扩展模型 { 公共函数线程(){ 返回$this->hasMa

我有一些嵌套关系, 以下是我的模型: 文章,线程和书页。 以及他们之间的关系:

发布

类后扩展模型
{
公共函数线程(){
返回$this->belongsTo('App\Thread');
}
}
线程

类线程扩展模型
{
公共功能书页(){
返回$this->belongsTo('App\BookPage');
}
公共职能职位(){
返回$this->hasMany('App\Post');
}
}
书页

类BookPage扩展模型
{
公共函数线程(){
返回$this->hasMany(App\Threads);
}
}
现在,我想获得带有书页和线程的帖子,但只有一些字段表示只有线程名称和书页标题

我已经阅读了有关检索关系的内容,我的做法与文档中的解释完全相同,但我的问题是:

当我检索带有关系但未指定字段的帖子时,我得到的结果很好:

查询:

$posts=Post::with('thread.bookpage:id,title)->get();
return$posts->toArray();
结果:

但当我同时为bookpage和thread指定字段时,我得到的bookpage为null。 我只能为bookpage或thread获取一个关系的特定字段。 我尝试了以下方式进行查询:

$posts=Post::with('thread.bookpage:id,…')->get();
//线程:所有字段,书页:指定字段
$posts=Post::with('thread.bookpage','thread:id,…')->get();
//线程:指定字段,书页:bull
如果我尝试为这两个字段指定字段,结果如下:


因此,如何仅从关系及其嵌套关系中获取特定字段?

您必须选择Laravel将急切加载结果与其父项匹配所需的所有外键(此处:
thread.book\u page\u id
):

$posts=Post::with('thread:id,book\u page\u id','thread.bookpage:id,title')->get();

您必须选择所有外键(此处:
thread.book\u page\u id
),Laravel需要这些外键将急切加载结果与其父级匹配:

$posts=Post::with('thread:id,book\u page\u id','thread.bookpage:id,title')->get();