Моя цель - создать конечную точку API книжного магазина с отношениями рейтингов.Соотношение между книгой и рейтингом выглядит следующим образом:
Модель книги
/**
* a book has many ratings
*/
public function ratings()
{
return $this->hasMany(Rating::class, 'book_id')->orderBy('created_at', 'ASC');
}
Модель рейтинга
/**
* a rating belongs to a book
*/
public function book()
{
return $this->belongsTo(Book::class);
}
Мой BookResource выглядит следующим образом
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\RatingResource;
class BookResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
// return parent::toArray($request);
return [
'id' => $this->id,
'title' => $this->title,
'author' => $this->author,
'rating' => RatingResource::collection($this->whenLoaded('ratings'))
];
}
}
Мой RatingResource выглядит следующим образом
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class RatingResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
Я хочу собрать все книги вместе с индивидуальными рейтингами и получить одну книгу вместе с ее рейтингом, а также использовать оба маршрута ниже в файле api.php
Route::get('/books', function() {
return BookResource::collection(Book::all());
});
Route::get('books/{book}', function(Book $book) {
return new BookResource($book);
});
Когда я делаю запрос на получение http://12.0.0.1:8000/api/books
для почтальона, я получаю все книги, но рейтинги не загружаются.То же самое происходит, когда я делаю запрос на получение http://12.0.0.1:8000/api/books/1
, книга возвращается без рейтинга.
Как загружаются отношения на основе v5.7 doc