如何在Laravel中将其他数据从控制器发送到资源

时间:2019-05-01 15:39:32

标签: laravel api

我有一个控制器,我想对变量执行一些逻辑并将其发送到资源以在api中显示 所以这是我的控制器:

public function index()
{
    $data = Accommodation::with('accommodationFacilities')->paginate();
    $x = Accommodation::with('cities')->get(1);

    return new AccommodationResource($data);
}

这是资源: 现在在资源中,我想在我的Api中显示$x

public function toArray($request)
{
    return parent::toArray($request);
}

编辑 如果我想显示$x数据,然后再显示$data模型,如下所示:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'X'  => $this->x,
    ];
}

因为现在它给了我以下错误:

  

未定义的属性:Illuminate \ Pagination \ LengthAwarePaginator :: $ id   当我删除分页时出现此错误:
  调用未定义的方法Illuminate \ Database \ Eloquent \ Builder :: all()

当我尝试$x替换$ data时,我不能再使用这些数据。

1 个答案:

答案 0 :(得分:1)

要接受资源的其他数据,请覆盖资源的constructor

住宿资源

public $x;

public function __construct($resource, $x)
{
    parent::__construct($resource);
    $this->x = $x;
}

public function toArray($request)
{
    // you can use '$this->x' here.

    return [
        'id' => $this->resource->id,
        'x' => $this->x,
    ];
}

控制器

return new AccommodationResource($data, $x);