Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema com Acessor

Tenho uma estrutura de subcategorias que estão relacionadas a uma categoria. O relacionamento é feito pelo ID mas desejo retornar o nome da categoria.

Pra isso, criei o Accessor na Model da Subcategoria:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Subcategoria extends Model
{

    protected $table = 'subcategoria';
    protected $keyType = 'integer';
    protected $fillable = ['id_categoria', 'nome'];
    protected $appends = ['anexos'];

    public function categoria()
    {
        return $this->belongsTo(Categoria::class, 'id_categoria');
    }

    public function produto()
    {
        return $this->hasMany(Produto::class, 'id_subcategoria');
    }


    public function getAnexosAttribute()
    {
        return [
            'categoria' => $this->categoria->nome,
        ];
    }
}

Porém, quando realizo a requisição, no JSON retorna todas as informações da Categoria, conforme exemplo:

{
    "id": 16,
    "nome": "Coca-Cola Zero Lata",
    "id_categoria": 13,
    "created_at": "2019-09-25 18:05:51",
    "updated_at": "2019-09-25 18:05:51",
    "anexos": {
        "categoria": "Bebidas"
     },
    "categoria": {
        "id": 13,
        "nome": "Bebidas",
        "created_at": "2019-09-19 19:59:06",
        "updated_at": "2019-09-19 19:59:15",
     }
}

Como faço para retirar as informações da Categoria na resposta?

1 resposta
solução!

Fala, Hegon.

É só usar o atributo hidden.

https://laravel.com/docs/5.8/eloquent-serialization#hiding-attributes-from-json