【问题标题】:Laravel is returning objects with key:value instead of array of objectsLaravel 使用键返回对象:值而不是对象数组
【发布时间】:2020-01-10 17:24:50
【问题描述】:

我正在尝试将 Json 响应作为对象数组返回。但相反,我得到了作为对象的响应。我有 condition_question 表,我在其中保存 question_id 和 condition_id。我想检索包含特定条件 ID 的所有问题。并按 answers_number 对它们进行排序。我是 Laravel 的新手,这是我的代码:

 $conditionsIdArray = array($chosenConditionsIds);

        $results = Question::whereIn('question_id', function ($query) use ($conditionsIdArray) {
            $query->select('question_id')
                ->from('condition_question')
                ->whereIn('condition_id', $conditionsIdArray);
        })->get()->sortByDesc('answers_number')->take(5);

         return response()->json([
            'questions' => $results
        ], 200);

我得到回应:

{
    "questions": {
        "0": {
            "question_id": 842,
            "question_title": "Qui tempora...",
            "question_body": "Repellendus non sint...",
            "image": "https://lorempixel.com/640/480/?18901",
            "question_view_count": 17,
            "votes_number": 9,
            "answers_number": 9,
            "id_user": 9930,
            "created_at": "2019-09-07 09:59:05",
            "updated_at": "2019-09-08 18:23:41"
        },
        "28": {
            "question_id": 20346,
            "question_title": "Quaerat facere...",
            "question_body": "Repudiandae culpa ...",
            "image": "https://lorempixel.com/640/480/?91963",
            "question_view_count": 2,
            "votes_number": 2,
            "answers_number": 9,
            "id_user": 3546,
            "created_at": "2019-09-07 10:07:38",
            "updated_at": "2019-09-07 10:07:38"
        },etc
}

如你所见,我得到了一个有对象的对象。我不想要键/值,只是简单的对象类型问题数组。 我现在挣扎了两天,尝试了一些不同的东西,比如 toArray() 但不知道如何解决它。任何帮助都将受到欢迎。

【问题讨论】:

  • 尝试将其编辑为response()->json($results, 200)
  • 为什么返回为json?只是return $results
  • 仍然无法正常工作。

标签: php laravel


【解决方案1】:

如果您更改索引数组中的键,它会认为它有一个关联数组,因为排序和取 5 索引是关闭的。在Laravel 集合上有一个values() method,您可以在那里调用它来重新索引集合。

return response()->json([
    'questions' => $results->values()
], 200);

【讨论】:

  • 您好,先生!它有效,谢谢!我是如此接近。我尝试了 values(),但以错误的方式进行操作 :) 感谢您的链接,一定会阅读更多相关信息!
  • 如果它解决了,记得接受答案 :) 它是 php 数组的古怪部分之一,而收集方法基本上只是在底层数组上调用 array_values()
  • 当然,我必须等待 3 分钟才能接受答案:D 顺便说一句,是否可以使用 $result->values() 并将其作为 QuestionResource($result->values( ))?
  • 你正在处理一个集合,所以你必须做 QuestionResource::collection($result->values())。 values() 仅重新索引数组并将其保留为集合,因此应该可以工作。
  • 太棒了,效果很好!现在,我的 Angular ngFor 知道循环:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2020-04-11
  • 2018-07-05
  • 1970-01-01
相关资源
最近更新 更多