Вот моя функция магазина
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 5.6 ....

Я бы добавил функцию в вашу модель 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'),
];
Если он собирался усложнить или повторно использовать где-то еще, я бы предложил использовать что-то вроде Красноречивые ресурсы
Какую версию Laravel вы используете?