Laravel добавляет только один атрибут из отношения - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь добавить дополнительное поле к моей Laravel 7 модели API:

class Layer extends Model {
    protected $fillable = ['name', 'filename', 'status', 'category_id'];

    protected $appends = ['category_name'];

    public function getCategoryNameAttribute()
    {
        return $this->category->name;
    }

    public function category()
    {
        return $this->belongsTo('App\LayerCategory', 'category_id');
    }
}

Мой контроллер:

.....
public function index()
{
    return Layer::orderBy('name', 'asc')->paginate(); 
}
.....

Ожидается следующий ответ:

{
  "id": 1,
  "category_id": 1,
  "name": "My Layer",
  "filename": "file_name.zip",
  "status": true,
  "category_name": "My category name"
}

Но я получаю:

{
  "id": 1,
  "category_id": 1,
  "name": "My Layer",
  "filename": "file_name.zip",
  "status": true,
  "category_name": "My category name",
  "category": [
    "id": 1,
    "name": "My category name",
    "status": true
  ]
}

Как вернуть только название категории? PS: я тоже пробовал с Ресурсами.

1 Ответ

2 голосов
/ 27 апреля 2020

Поскольку вы стремитесь загрузить отношение Category, чтобы получить category_name, вам необходимо добавить логи c, чтобы скрыть category из вашего ответа JSON. Это можно сделать с помощью атрибута Hidden при сериализации:

protected $hidden = ['category'];

. Для получения дополнительной информации вы можете прочитать https://laravel.com/docs/7.x/eloquent-serialization#hiding -attributes-from- json.

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