Laravel ресурс возвращает пустой массив - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть ресурс, где я получаю данные о продукте через третью таблицу, но с трудом заставляю отношения работать на моделях, поэтому он возвращает пустой массив.

Logi c

  1. Продукт имеет много штрих-кодов
  2. Штрих-коды могут иметь (принадлежащий) ущерб
  3. При повреждении мы получаем продукт через таблицу штрих-кодов (храним barcode_id)

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

Код

Product model

class Product extends Model
{

    protected $fillable = [
        'name', 'slug', 'stock', 'cover', 'description', 'sku', 'price', 'discount',
    ];

    public function barcodes()
    {
        return $this->hasMany(Barcode::class);
    }
}

Barcode model

class Barcode extends Model
{
    protected $fillable = [
        'product_id', 'sku', 'serial_number', 'price', 'discount',
    ];

    public function product()
    {
        return $this->belongsTo(Product::class);
    }

    public function damages()
    {
        return $this->hasMany(DamageProduct::class);
    }
}

DamageProduct model

class DamageProduct extends Model
{
    protected $fillable = [
        'outlet_id', 'user_id', 'barcode_id', 'description',
    ];

    public function barcode()
    {
        return $this->belongsTo(Barcode::class);
    }

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }
}

DamageProductsResource resource

class DamageProductsResource extends JsonResource
{
    public function toArray($request)
    {
        $arrayData = [
            'id' => $this->id,
            'outlet' => new OutletsResource($this->whenLoaded('outlet')),
            'user' => new usersResource($this->whenLoaded('user')),
            'barcode' => new BarcodeResource($this->whenLoaded('barcode')),
            'description' => $this->description,
        ];

        return $arrayData;
    }
}

Result

one

Есть идеи?

Обновление

Если вам нужно посмотреть, как выглядит ресурс BarcodeResource, он выглядит так:

public function toArray($request)
{
        $arrayNull = [
            'id' => $this->id,
            'product' => new ProductsResource($this->whenLoaded('product')),
            'sku' => $this->sku,
            'serial_number' =>  $this->serial_number ? (Int) $this->serial_number : null,
            'price' => (Int) $this->price,
            'discount' => $this->discount ? (Int) $this->discount : null,
        ];
}

1 Ответ

1 голос
/ 19 апреля 2020

Я бы сказал, что вы просто забыли утверждение return в своем BarcodeResource

public function toArray($request)
{
    $arrayNull = [
        'id' => $this->id,
        'product' => new ProductsResource($this->whenLoaded('product')),
        'sku' => $this->sku,
        'serial_number' =>  $this->serial_number ? (Int) $this->serial_number : null,
        'price' => (Int) $this->price,
        'discount' => $this->discount ? (Int) $this->discount : null,
    ];
    return $arrayNull; // this is missing
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...