Laravel嵌套渴望加载并选择

时间:2019-03-07 16:45:28

标签: laravel eloquent eager-loading

当我尝试像这样嵌套Eager加载

 $journal = Journal::with(['pages','pages.articles'])->select('id','titre','date')->findOrFail($id);

这是可行的,但是当我尝试为嵌套关系添加选择以仅获得特定列时,如下所示:

 $journal =Journal::with(['pages'=> function ($query) {
        $query->select('id','thumbnail');
    },'pages.articles'=> function ($query) {
        $query->select('id','images','areas');
    }])->findOrFail($id);

我只有一个空的Journal的父模型(pages

  {
   "id": 3,
   "numero": "2219",
   "titre": "J2219",
   "date": "2018-12-13",
   "created_at": "2019-01-03 10:16:59",
   "updated_at": "2019-01-08 11:04:42",
   "deleted_at": null,
   "pages": []
}

3 个答案:

答案 0 :(得分:1)

您忘记指出您的外键:

$journal = Journal::with(['pages'=> function ($query) {
        $query->select(['id','journal_id','thumbnail']);
    },'pages.articles'=> function ($query) {
        $query->select(['id','page_id','images','areas']);
    }])->findOrFail($id);

答案 1 :(得分:0)

我最近有一个类似的问题。

由于您渴望加载选择的列,因此首先确保在我们的迁移表上设置了主键可能会有所帮助。

第二,我还可以通过将要访问的关系上的外键作为选择参数传递给我,从而解决问题。例如:

...

},'pages.articles'=> function ($query) {
    $query->select('id', 'page_id', 'images','areas');

...

答案 2 :(得分:0)

我这样解决

$content =Journal::with(['pages:id_journal,id','pages.articles:id_page,titre'])->select('id','titre','date')->findOrFail($id);

是关于外键