У меня есть таблица с именем знаменитости , которая имеет отношение «многие ко многим» с тремя другими таблицами: коллекции , категории и теги.В настоящее время у меня настроен API, чтобы он возвращал следующее:
[
{
"id": 1,
"display_name": "Joe Shmo",
"born": "1917-05-11",
"died": null,
"biography": "Some guy in a well-known TV show.",
"collections": [
{
"id": 1,
"name": "Featured Celebrity"
}
],
"categories": [
{
"id": 1,
"name": "Movies/TV"
}
],
"tags": []
},
{
"id": 2,
"display_name": "Jane Doe",
"born": "1914-05-11",
"died": "1993-10-30",
"biography": "She was famous for a show in the 80's.",
"collections": [
{
"id": 2,
"name": "Top Ten Celebrities"
}
],
"categories": [
{
"id": 1,
"name": "Movies/TV"
}
],
"tags": []
},
...
Я хотел бы вернуть JSON, сгруппированный по значению name из collection .Вот пример того, что я хочу:
[
{
"Feature Celebrity": [
{
"id": 1,
"display_name": "Joe Shmo",
"born": "1917-05-11",
"died": null,
"biography": "Some guy in a well-known TV show.",
"categories": [
{
"id": 1,
"name": "Movies/TV"
}
],
"tags": []
}
]
},
{
"Top Ten Celebrities": [
{
"id": 2,
"display_name": "Jane Doe",
"born": "1993-05-11",
"died": null,
"biography": "A famouse beach volley ball person.",
"categories": [
{
"id": 2,
"name": "Sports"
}
],
"tags": []
},
...
]
}
]
Что касается моего кода Laravel, вот что я настроил.
Знаменитость (модель)
namespace App;
use Illuminate\Database\Eloquent\Model;
class Celebrity extends Model
{
protected $hidden = ['pivot'];
public function categories()
{
return $this->belongsToMany('App\Category');
}
public function collections()
{
return $this->belongsToMany('App\Collection');
}
public function tags()
{
return $this->belongsToMany('App\Tag');
}
}
Коллекция (модель)
namespace App;
use Illuminate\Database\Eloquent\Model;
class Collection extends Model
{
protected $hidden = ['pivot'];
public function celebrities()
{
return $this->belongsToMany('App\Celebrity');
}
}
Категория (модель)
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $hidden = ['pivot'];
}
Метка (модель)
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tag extends Model
{
protected $hidden = ['pivot'];
}
В моем CelebrityController у меня есть следующий код, который возвращает JSON в формате, подобном показанному в первом примере:
public function list($born = null) {
if (!isset($born)) {
$born = date('m-d');
}
return Celebrity::with([
'collections:id,name',
'categories:id,name',
'tags:id,name',
])
->where('born', 'like', '%-' . $born . '%')
->get([
'id',
'display_name',
'born',
'died',
'biography',
]);
}
ЗдесьЭто изображение моих таблиц и их отношений: Таблицы знаменитостей
Я очень новичок в Laravel и Eloquent.Я не могу понять, как перейти от первого примера JSON ко второму.Любая помощь будет оценена.