Laravel API Resource вернул неопределенное свойство: stdClass :: $ book ", - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть сводная таблица Book_Category, в которой хранятся отношения между book таблицей и category таблицей.

В моей Book модели у меня есть

public function categories()
    {
        return $this->belongsToMany(Category::class);
    }

В моей Category модели` У меня есть

public function books()
{
    return $this->belongsToMany(Book::class);
}

Я не думаю, что мне нужна модель для Book_Category, поскольку это сводная таблица.

Но теперь мне нужно создать ресурс API. Я пытаюсь вернуть книгу определенной категории

Так что я делаю это

public function singlepage(Request $request,$book) 
$relatedCategory = BookCatResource::collection(DB::table('book_category')
                                              ->where('category_id', $request->category_id)->get());

Я использую построитель запросов, потому что у меня нет модели

В моем ресурсе у меня есть это

public function toArray($request)
{
    return [
        'book_id' => new BookResource($this->book),
        'category_id' => $this->category_id
   ];    
}

Но он вернул ошибку

Неопределенное свойство: stdClass :: $ book ",

1 Ответ

0 голосов
/ 11 февраля 2020

В вашем сценарии вам не нужно использовать модель для сводной таблицы, вы можете сделать следующее:

Route::get('/', function () {
    return CategoryResource::collection(Category::where('id', 1)->get());
});

CategoryResource.php

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class CategoryResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->title,
            'books' => BookResource::collection($this->books),
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}

BookResource.php

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class BookResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...