Условно Laravel Ресурс - PullRequest
       5

Условно Laravel Ресурс

0 голосов
/ 04 марта 2020

TicketResource. php

public function toArray($request) {
    return [
            'id' => $this->id,
            'user_id' => $this->user_id,
            'title' => $this->title,
            'body' => $this->body,
            'status' => $this->status,
            'created_at' => $this->created_at->toDateTimeString(),
    ];
}

CommentResource. php

public function toArray($request) {
    return [
            'id' => $this->id,
            'body' => $this->body,
            'user_id' => $this->user_id,
            'created_at' => $this->created_at->toDateTimeString()
    ];
}

TicketController. php

public function index() {
    return TicketResource::collection(Ticket::all());
}

public function show(Ticket $id) {
    $ticket = $id;
    return new TicketResource($ticket);
}

Билет на модель. php

public function comments() {
    return $this->hasMany('App\Comment');
}

Комментарий модели. php

public function ticket() {
    return $this->belongsTo('App\Ticket');
}

маршруты / API. php

Route::get('tickets', 'TicketController@index');
Route::get('tickets/{id}', 'TicketController@show');

Я хочу, когда я запрашиваю tickets/{id} URL, я ожидаю получить этот ответ:

{
    "data": {
        "id": 1,
        "user_id": 2,
        "title": "lorem",
        "body": "epsum",
        "status": "open",
        "created_at": "2020-03-04 18:14:56",
        "comments": [
                {
                    "id": 1,
                    "body": "equi",
                    "user_id": 1,
                    "created_at": "2020-03-05 18:14:56",
                }
        ]
    }
}

Наоборот, когда я захожу на tickets URL, я не хочу, чтобы comments добавлялось к каждому тикету.

Как я могу это реализовать?

1 Ответ

0 голосов
/ 05 марта 2020

Вам нужно добавить отношение

Это мой класс модели:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
  public function children()
  {
    return $this->hasMany(Category::class, 'parent_id', 'id')->select('categories.id', 
    'categories.cid AS key', 
    'categories.name AS label', 
    'categories.type',
    'categories.lvl');
  }
}

в моем контроллере:

$parents = Category::select(
  'categories.id', 
  'categories.id AS key', 
  'categories.name AS label')->where('lvl', 1)->get();
foreach ($parents as $item) {
  $item->children
}

return Response::json($parents, 200, array('Content-Type' => 'application/json;charset=utf8'), JSON_UNESCAPED_UNICODE);

Результат:

[
  {
     "id":2,
     "key":2,
     "label":"parent label",
     "children":[
        {
           "id":17,
           "key":"92697f63-5c50-11ea-80df-5cf9ddf839d3",
           "label":"child label",
           "type":"Category",
           "lvl":2,
        }
     ]
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...