【问题标题】:Laravel Resource Collection deletes my array keysLaravel 资源集合删除我的数组键
【发布时间】:2023-03-12 14:52:01
【问题描述】:

我有一个资源集合来获取我的所有对话。 因为前端已经(由另一个人)编码,所以我想将所有这些作为对象返回,数据库的 dialog_id 作为键,对话对象作为值。

但是当我想转换从我的资源集合中获得的数组(使用 (object) $array)时,它仍然返回一个数组没有我设置的任何键。

在我的控制器函数中我调用:

return new DialogueResourceCollection($dialogues);

我的收藏资源如下所示:

class DialogueResourceCollection extends ResourceCollection
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request $request
     * @return array
     */
    public function toArray($request)
    {
       $array = [];
        for ($i = 0; $i < sizeof($this); $i++) {
            $j = $this[$i]->dialogue_id;
            $array[$j] = $this[$i];
        }

        return $array;
    }
}

我得到了什么:

[
    {
        "dialogue_id": 1,
        "text": "example text"
    }, 
...

我想得到什么:

{
 "34" :   {
        "dialogue_id": 34,
        "text": "example text"
    }, 
...
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    当从路由返回资源集合时,Laravel 会重置集合的键,以便它们以简单的数字顺序排列。但是,您可以向资源类添加一个 preserveKeys 属性,指示是否应保留集合键。把它放在你的代码上面。

    public $preserveKeys = true;
    

    在此处阅读文档preserve keys

    【讨论】:

      猜你喜欢
      • 2020-06-25
      • 2020-01-05
      • 2020-07-04
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      相关资源
      最近更新 更多