Для проекта Laravel 7.3, над которым я работаю, у меня есть две таблицы, которые выглядят следующим образом (соответствующая часть):
("prestation" = "performance" in engli sh)
Schema::create('prestations', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->unsignedInteger('prestation_categories_id');
...
$table->timestamps();
});
Schema::create('prestation_categories', function (Blueprint $table) {
$table->id();
$table->string('title');
...
$table->timestamps();
});
Вот как я устанавливаю их отношения:
Prestation. php
/**
* @return BelongsTo
*/
public function categories ()
{
return $this->BelongsTo('App\PrestationCategory');
}
PrestationCategory. php
/**
* @return HasMany
*/
public function prestations ()
{
return $this->hasMany('App\Prestation');
}
Теперь мой Laravel используется в качестве API для SPA, который работает поверх него, и отображает свои данные в JSON. У меня есть страница, предназначенная для отображения всех данных, плюс как минимум два поля категории исполнения. Моя цель - получить строку JSON, которая выглядит следующим образом:
[
{
id: 1,
title: 'Some title',
description: 'Lorem ipsum sic amet...',
category: { // or prestation_category, I don't care
id: 2
color: '#42B79CFF',
},
...
},
{
...
}
]
Однако у меня много проблем с загрузкой этой связанной категории. Я нашел бесчисленные вопросы по этому вопросу, но, как ни странно, ничего не помогло.
Вот как я пытался настроить действие моего контроллера
public function dashboard ()
{
// Try #1
$prestation = Prestation::with('categories:id,color')->get();
// Try #2
$prestations = Prestation::with(['categories' => function ($query) {
$query->select('color', 'whole_day');
}])->get();
// Try #3
$prestations = Prestation::join('prestation_categories', 'prestations.prestation_categories_id', '=', 'prestation_categories.id')->get();
return response()->json($prestations);
}
Каждый из этих методов возвращает мне мое «Prestation», однако связанная категория не загружена.
Где я сделал ошибку и как ее исправить?
Заранее спасибо