Возвращение отношений laravel в jsonPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Возвращение отношений laravel в json

Сообщение Anonymous »

Сейчас я делаю это, как сказано в заголовке:

Код: Выделить всё

$user = User::where('username', request('username'))->first();

$posts = [];
$comments = [];
foreach($user->posts as $post){
foreach($post->comments as $comment){
array_push($comments, [
'id' => $comment->id,
'body' => $comment->body,
'user' => $comment->user->only(['name', 'id']),
]);
}
array_push($posts, [
'title' => $post->title,
'id' => $post->id,
'body' => $post->body,
'comments' => $comments,
]);
}
return response()->json([
'user' => $user->only(['name', 'avatar', 'age']),
'posts' => $posts,
]);
Есть ли более короткий способ сделать это, например:

Код: Выделить всё

$user->only(['name', 'avatar', 'age'])->withPostsOnly(['id', 'title', 'body'])->withCommentsOnly(['id', 'body']);
Я знаю, что есть способ создавать методы внутри моделей, которые возвращают эти части данных, а затем использовать их так же, как указано выше, но короче.

Но есть ли способ использовать что-то вроде getNameAttribute($value) для отношений, чтобы я мог сказать:

Код: Выделить всё

$user->only(['id', 'name', 'age', 'posts'])
;

А в значении сообщений мне нужно указать все сообщения и данные об отношениях, такие как комментарии и пользователей, которые связаны с комментариями.

Итак, в основном в модели пользователя:

Код: Выделить всё

public function posts() {
return $this->hasMany('App/Post')->only('id', 'title', 'body', 'comments');
}
И внутри модели Post:

Код: Выделить всё

public function comments() {
return $this->hasMany('App/Comment')->only('id', 'body', 'user');
}
И внутри модели комментариев:

Код: Выделить всё

public function comments() {
return $this->belongsTo('App/User')->only('id', 'name');
}
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/537 ... ithin-json
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»