Laravel 5.8 Отношения ManyToMany дочерние отношения usign внешний ключ не работает - PullRequest
0 голосов
/ 28 января 2020

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

Ресурс изображения:

     return [
         'id' => $this->id,
         'name' => $this->name,
         'presentation' => $this->presentation->description,
         'slug' =>$this->filename
    ];

Модель изображения:

    public function presentation()
    {
        return $this->hasOne(ProductPresentation::class, 'id', 'presentation_id');
    }

Возвращает:

{
    "data": [
        {
            "id": 1,
            "name": "White Gold",
            "presentation": "Product x",
            "slug": "products/white-gold.jpg"
        }
}

Но когда я вызываю отношение manyToMany (Products -> images), я получаю только Id, а не внешнее отношение

    "data": [
        {
            "id": 1,
            "name": "White Gold",
            "price": "€ 10,00",

            "images": [
                {
                    "id": 1,
                    "name": "White Gold",
                    "filename": "products/white-gold.jpg",
                    "presentation_id": 1
                }
            ]
        },

Ресурс Products вызывает ресурс изображения, но этот не загружает отношение (требуется "presentation": "Product x" вместо "presentation_id": 1)

Использование ресурса:

        return [
            'id' => $this->id,
            'name' => $this->name,
            'price' => $this->formattedPrice,
            'images' => $this->images
        ];

с использованием модели:

    public function images()
    {
        return $this->belongsToMany(Image::class);
    }

Таким образом, вопрос заключается в том, как добавить отношение к toTany (Image :: class)

1 Ответ

0 голосов
/ 28 января 2020

Попробуйте изменить

return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->formattedPrice,
        'images' => $this->images
    ];

На

return [
        'id' => $this->id,
        'name' => $this->name,
        'price' => $this->formattedPrice,
        'images' => YourImageResource::collection($this->images)
    ];
...