0

我想要这个:

  • 集合'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"
  }
}
4

2 回答 2

1

由于枢轴是否已加载,只需否定另一个字段的整个表达式,它将永远不会被复制

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;
            }),
    ];
}
于 2019-10-05T11:25:31.437 回答
0

很晚的答案,但 $this-whenPivotLoaded() 接受默认值作为第三个参数

在您的情况下,它将类似于:

$this->whenPivotLoaded('item_groups_attribute', function () {
                return $this->pivot->title . "Hello";
            }, $this->title),
于 2022-02-03T14:53:03.210 回答