将查询结果附加到现有的 json 对象

Posted

技术标签:

【中文标题】将查询结果附加到现有的 json 对象【英文标题】:Append query result to a existing json object 【发布时间】:2017-06-09 02:41:40 【问题描述】:

我有 2 个变量中的 2 个查询的结果,我有一个 JSON 对象我想将查询结果 append 到该 JSON,然后将其返回给用户

在可能的控制器中,我得到了所有的结果

if ($request->wantsJson()) 

    $agent_id = $request->user()->id;

    $drivers_cout = Driver::all()->count();

    $drivers_cout_by_agent = Driver::where(['agent_id' => $agent_id])->get()->count();

    return $request->user();


//the result of  $request->user();

  #attributes: array:12 [
    "id" => 201702
    "name" => "Agent"
    "email" => "agent@gmail.com"
    "phone_number" => "966355826"
  ]

//and i want something like

  #attributes: array:12 [
    "id" => 201702
    "name" => "Agent"
    "email" => "agent@gmail.com"
    "phone_number" => "966355826"
    "drivers_count" => "96"                        //How do i append these two
    "drivers_cout_by_agent" => "16"         
  ]

谢谢

【问题讨论】:

试试这个:Serializing Models & Collections 【参考方案1】:

向数组添加数据只是将数据放入具有您希望它具有的索引名称的数组中

if ($request->wantsJson()) 

    $agent_id = $request->user()->id;              

    $drivers_count = Driver::all()->count();         //<-- fixed spelling

    $drivers_cout_by_agent = Driver::where(['agent_id' => $agent_id])->get()->count();

    $arr = $request->user();
    $arr['drivers_count'] = $drivers_count;
    $arr['drivers_cout_by_agent'] = $drivers_cout_by_agent
    return $arr;

【讨论】:

我发现我把这件事复杂化了一点;D @PatrykUszyński 我不明白你说什么,你的意思是我做的方式不对,请纠正我的最佳做法,我是个新手,谢谢 没有其他人评论他的答案比您要求的信息多一点【参考方案2】:

您似乎有一个数组,只是想向其中添加一些元素,因此可以这样做。

$tmp= $request->user();
$tmp['driver_count'] = (where you get it from);
$tmp['count_by_id'] = (where you get it from);
return $tmp;

(抱歉缺少细节,我在我的手机上。如果这是你需要的,我稍后会展开/更正,如果不是,我会删除。想尽快给你。)

【讨论】:

非常感谢您抽出宝贵时间非常感谢,我找到了解决方案 晚了几分钟,我明白了!手机让我慢了下来。 :) 我想我会删除答案。【参考方案3】:

根据Serializing Models & Collections。您可以通过以下方式简单地将其序列化为 json 或数组:

return $request->user()->toJson();
// or
return $request->user()->toArray();

还有一段关于将数据附加到 json 的部分:Appending Values To JSON。但是在您的情况下,您可以将数据序列化为数组,附加您的值并将其封装到 json。

$returnData = $request->user()->toArray();
$returnData['foo'] = 'bar';

return json_encode($returnData);

【讨论】:

感谢您的回复,其实我想将查询结果附加到json对象中

以上是关于将查询结果附加到现有的 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

Jackson 不会将新的 JSON 对象附加到现有的 Json 文件中

如何附加到现有的 java.io.ObjectStream? [复制]

将 HTML 代码附加到现有的 Razor 部分

如何将绘图附加到现有的 pdf 文件

如何使用附加模式将音频录制到现有的音频文件中?

如何将指标附加到现有的 Lambda 日志组?