Laravel Извлечение определенных полей из вложенных отношений - PullRequest
0 голосов
/ 07 октября 2018

У меня есть несколько вложенных отношений. Ниже приведены мои модели: Post, Thread и BookPage.и их взаимоотношения:

Публикация

class Post extends Model
{

    public function thread(){
        return $this->belongsTo('App\Thread');
    }

}

Тема

class Thread extends Model
{

    public function bookPage(){
        return $this->belongsTo('App\BookPage');
    }

    public function posts(){
        return $this->hasMany('App\Post');
    }

}

BookPage

class BookPage extends Model
{

    public function threads(){
        return $this->hasMany(App\Threads);
    }

}

теперь я хотел получать сообщения с книжными страницами и темами, но только в некоторых полях можно указать только название темы и заголовок страницы

Я читал о восстановлении отношений, и я поступаю точно так же, как объясненов документах, но вот моя проблема:

Когда я получаю сообщения с отношениями без указания полей, я получаю хорошие результаты:

Запрос:

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

Результат:

Result

но когда я указываю поля для обоих, то есть поля для страницы книги, а также поля для темы iЯ получаю закладку как ноль.Я могу получить определенные поля для одного отношения только для страницы книги или для темы.Я пытался сделать запрос следующими способами:

$posts = Post::with('thread.bookpage:id, ...')->get();
//thread:all fields, bookpage:specified fields

$posts = Post::with('thread.bookpage', 'thread:id, ...')->get();
//thread:specified fields, bookpage:bull

Вот результат, если я попытался указать поля для обоих: enter image description here

так как можноя получаю конкретные поля только из отношения и его вложенного отношения?

1 Ответ

0 голосов
/ 07 октября 2018

Вы должны выбрать все внешние ключи (здесь: thread.book_page_id), которые требуются Laravel для соответствия результатов активной загрузки их родителям:

$posts = Post::with('thread:id,book_page_id', 'thread.bookpage:id,title')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...