Ресурс: используйте whenPivotLoaded как условие
Я бы хотел вот это:
- Коллекция возвращается
'title' => $this->title
когда он загружен без оси - Коллекция возвращается
title => $this->pivot->title . "Hello World"
когда он загружен с шарниром.
Это мой подход:
namespace App\Http\Resources;
use App\Item;
use Illuminate\Http\Resources\Json\JsonResource;
class ItemResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->whenPivotLoaded('item_groups_attribute',
function () {
return $this->pivot->title . "Hello";
}), // but how to add $this->title, if it's not with pivot?
];
}
}
Если я попробую что-то вроде этого:
'title' => $this->whenPivotLoaded('item_groups_attribute',
function () {
return $this->pivot->title . "Hello";
}) ?: $this->title,
это не работает, так как результат
нет сводки (заголовок не отображается в полях):
{
"data": {
"id": 2
}
}
Это ответ при загрузке с помощью pivot:
{
"data": {
"id": 5,
"title": "Test"
}
}
2 ответа
Поскольку сводная таблица либо загружена, либо нет, просто отрицайте все выражение для другого поля, оно никогда не будет дублироваться
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->whenPivotLoaded('item_groups_attribute',
function () {
return $this->pivot->title . "Hello";
}),
'title' => !$this->whenPivotLoaded('item_groups_attribute',
function () {
return $this->title;
}),
];
}
Очень поздний ответ, но $this-whenPivotLoaded() принимает значение по умолчанию в качестве третьего параметра
В вашем случае это будет что-то вроде:
$this->whenPivotLoaded('item_groups_attribute', function () {
return $this->pivot->title . "Hello";
}, $this->title),