Получить только необходимые данные - PullRequest
0 голосов
/ 29 августа 2018

Вот моя функция магазина

public function store(Request $request)
{
    $post = new Post();
    $post->author()->associate(auth()->user());
    $post->fill($request->all());
    $post->save();

    return response()->json($post);
}

В ответ я получаю:

enter image description here

Мне не нужны все данные, поэтому я попытался взять только те данные, которые я определил следующим образом:

$post = $post->only([
    'id',
    'title',
    'content',
    'published_at',
    'author'
]);

И ответ теперь:

enter image description here

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

    $post = [
        'id' => $post->id,
        'title' => $post->title,
        'content' => $post->content,
        'published_at' => $post->published_at->toDateTimeString(),
        'author' => [
            'id' => $post->author->id,
            'name' => $post->author->name,
            'email' => $post->author->email,
        ]
    ];

Так что мой вопрос ... может быть, есть более элегантный способ добиться этого.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Простейшим способом, вероятно, было бы просто использовать only с автором:

return $post->only('id', 'title', 'content') + [
        'author' => $post->author->only('id', 'name', 'email'),
    ];

Если это станет более сложным или будет использовано где-то еще, я бы предложил использовать что-то вроде Eloquent Resources

0 голосов
/ 29 августа 2018

Я бы добавил функцию к вашей модели Поста

public function jsonOutput()
{
    $array['id'] = $this->id;
    $array['title'] = $this->title;
    $array['content'] = $this->content;
    $array['author'] = [
        'id' => $this->author->id,
        'name' => $this->author->id
    ];

    return $array;
}

и затем назовите это так

return response()->json($post->jsonOutput());
...