API отображает данные пользователя - PullRequest
0 голосов
/ 05 мая 2019

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

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

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

[{"id":43,"title_id":1,"users":{id:"1",username:"test",email:"example@example.com"},"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?

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Для API лучше: Eloquent ресурс

Пример в вашем ресурсе 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: "superadmin@example.com",
     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: "superadmin@example.com",
     created_at: "2018-12-13 12:09:07",
     updated_at: "2018-12-22 06:47:13",
     pk: "s",
   }
0 голосов
/ 05 мая 2019

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

$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:"example@example.com"},"comment":"asdasddsa","season":null,"episode":null,"created_at":null,"updated_at":"2019-04-30 09:14:15"}]

Надеюсь, это понятно для вас. Конечно, чтобы адаптироваться к вашим потребностям. Дом

...