API отображает информацию о пользователе

Мой текущий API:

[{"id":43,"title_id":1,"user_id":1,"комментарий":"asdasddsa","сезон":null,"эпизод":null,"created_at":null,"updated_at": "2019-04-30 09:14:15"}]

Я хочу заменить user_id на данные пользователя из таблицы пользователей в соответствии с id. Я хотел бы видеть его таким:

[{"id":43,"title_id":1,"users":{id:"1",username:"test",email:"[email protected]"},"comment":"asdasddsa","season":null,"episode":null,"created_at":null,"updated_at":"2019-04-30 09:14:15"}]

Контроллер

public function index($id)
{
    $test = Title::where('title_id', $id)->get();

    return $test;
}

Название модели

public function user()
{
    return $this->belongsTo('App\User', 'user_id');
}

protected $table = 'title';

если я использую foreach() в своем контроллере следующим образом:

$test = Title::where('title_id', $id)->get(); 
foreach($test as $details) 
{
    return $details->user->username;
}

Он получает сведения о пользователе, но его нет в API. Как я могу получить его в API?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
94
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ты можешь это сделать:

$test= Title::where('title_id', $id)->get();

И если я правильно понимаю, на один титул приходится один пользователь, правильно? Затем вы можете сделать это, чтобы получить пользователя заголовка:

$test->user = User::find($test->user_id);

И, наконец, верните заголовок в ответ json:

return response()->json($test, 200);

Ваша спина пришлет то, что вы хотите, примерно так:

[{"id":43,"title_id":1,"users":{id:"1",username:"test",email:"[email protected]"},"comment":"asdasddsa","season":null,"episode":null,"created_at":null,"updated_at":"2019-04-30 09:14:15"}]
Ответ принят как подходящий

Для API лучше Красноречивый ресурс

Пример в вашем ресурсе Title будет выглядеть так:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Title extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'title_id' => $this->title_id,
            'title_name' => $this->title_name,
            'user_name' => $this->user->name,
        ];
    }

    public function with($request)
    {
        return  [
            'status' => '200',
            'response' => 'Title resource',
        ];
    }
}

В вашем контроллере

 public function show(Title $title)
  {
      return new TitleResource($title);
  }

В 5.4 будет так

public function show(Title $title)
{
    $title->user_name = $title->user->name;
    return $title->toJson();
}

и он должен работать нормально

пример в тинкере

>>> $user = App\User::find(1);
=> App\User {#3161
     id: 1,
     name: "superadmin",
     email: "[email protected]",
     created_at: "2018-12-13 12:09:07",
     updated_at: "2018-12-22 06:47:13",
   }
>>> $user->pk = 's';
=> "s"
>>> $user
=> App\User {#3161
     id: 1,
     name: "superadmin",
     email: "[email protected]",
     created_at: "2018-12-13 12:09:07",
     updated_at: "2018-12-22 06:47:13",
     pk: "s",
   }

выглядит хорошо, но App\Http\Resources\JsonResource не найден

Ibrahim Aldar 05.05.2019 15:10

@IbrahimAldar проверьте документацию, вам не нужно писать ее вручную, она будет сгенерирована командой artisan, которая установит правильный путь для вашего приложения, после чего вы сможете настроить код внутри.

Prafulla Kumar Sahu 05.05.2019 15:12

@IbrahimAldar Я обновил свой ответ, вы можете просто назначить имя своего пользователя как свойство текущего $title и вернуть его, все должно работать нормально.

Prafulla Kumar Sahu 05.05.2019 15:56

JsonResource добавлен из laravel 5.6

Ibrahim Aldar 05.05.2019 17:13

@IbrahimAldar использует второй способ получения модели, добавляет преобразование свойства в json и возвращает его.

Prafulla Kumar Sahu 05.05.2019 17:24

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