Получить только необходимые данные

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

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

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

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

Получить только необходимые данные

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

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

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

Получить только необходимые данные

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

    $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,
        ]
    ];

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

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

Какую версию Laravel вы используете?

Rwd 29.08.2018 11:58

Laravel 5.6 ....

b00sted 'snail' 29.08.2018 12:00
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы добавил функцию в вашу модель Post

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());
Ответ принят как подходящий

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

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

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

Другие вопросы по теме