UPD: Решено. Я думаю (проверьте ниже)
Я пытаюсь сгруппировать свой ответ API по определенному столбцу с помощью ресурсов Laravel.
Нравится
{
"data":{
"1":[ <=== (!!) To have this groups
{
"id":63,
"eve_id":95924195,
"name":"John",
"group":1, <== (!!!) from this column
"is_active":1,
"is_editable":1,
"created_at":"2018-11-08 05:26:20",
"updated_at":"2018-11-08 05:26:20"
},
{
"id":64,
"eve_id":95824961,
"name":"Doe",
"group":1,
"is_active":1,
"is_editable":1,
"created_at":"2018-11-08 05:41:10",
"updated_at":"2018-11-08 05:41:10"
}
]
}
}
Мой экземпляр ресурса
class SomeResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'group' => $this->group,
'is_active' => $this->is_active,
'is_editable' => $this->is_editable,
'created_at' => (string) $this->created_at,
];
}
}
мой экземпляр коллекции:
class SomeCollection extends ResourceCollection
{
public $collects = 'App\Http\Resources\SomeResource';
public function toArray($request)
{
return [
'data' => $this->collection,
];
}
}
Использование основного красноречивого метода
Some::where('is_active', '1')->get()->groupBy('group');
return ['entries' => $entries];
не могу решить проблему, по крайней мере, если я каким-то образом могу передать эти записи и повторить их в ResourceCollection
Спасибо.
UPD: Хорошо, проблема была решена путем создания нового экземпляра ресурса SomeGroupCollection и группировка производилась с помощью основного красноречивого метода
$entries = Some::where('is_active', '1')->get()->groupBy('group');
return new SomeGroupCollection($entries);
SomeGroupCollection
class SomeGroupCollection extends ResourceCollection
{
public $collects = 'App\Http\Resources\SomeCollection';
public function toArray($request)
{
return [
'entries' => $this->collection
];
}
}
SomeCollection
class SomeCollection extends ResourceCollection
{
public $collects = 'App\Http\Resources\SomeResource';
public function toArray($request)
{
return [
$this->collection,
];
}
}
SomeResource
class SomeResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'group' => $this->group,
'is_active' => $this->is_active,
'is_editable' => $this->is_editable,
'created_at' => (string) $this->created_at,
];
}
}
я не это спрашиваю
уточните свой вопрос, пожалуйста?
Мне нужно группа по мой ресурсный ответ по определенному столбцу.
пожалуйста, попробуйте с помощью -> group By ('table Name.attribute', 'as'); если он работает хорошо, в противном случае попробуйте с помощью DB :: raw query






Это сработало для меня в Laravel 8, но я подозреваю, что это будет работать так же в предыдущих версиях.
SomeResource::collection($models)->groupBy('group');
но без ключа data.
ответ, который вы показываете для достижения в «Like this Code», не является правильным ответом json, вы можете попробовать с помощью return response () -> json (['statusCode' => '1', 'statusMessage' => 'ваше сообщение ',' Результат '=> $ переменная]);