Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从SQL结果创建嵌套JSON对象_Javascript_Php_Mysql_Sql_Json - Fatal编程技术网

Javascript 从SQL结果创建嵌套JSON对象

Javascript 从SQL结果创建嵌套JSON对象,javascript,php,mysql,sql,json,Javascript,Php,Mysql,Sql,Json,我试图弄清楚如何创建嵌套的JSON对象,如下所示: company: "Company 1", pricing: { term: "1 year", price: "$4.95", term: "2 years", price: "3.95" }, 我在MySQL中有两个表,一个叫做plans,它是以这种方式构造的 | id | company | ------------------ | 2 | company 1 | 另一个表Plan_pricin

我试图弄清楚如何创建嵌套的JSON对象,如下所示:

company: "Company 1",
pricing: {
    term: "1 year",
    price: "$4.95",

    term: "2 years",
    price: "3.95"
},
我在MySQL中有两个表,一个叫做plans,它是以这种方式构造的

| id |  company  |
------------------
|  2 | company 1 |
另一个表Plan_pricing表示定价数据

| id | plans_id |  term  | price | 
--------------------------------
| 1  |   2      | 1 year | $4.95 |
| 2  |   2      | 2 years| $3.95 |
我使用Laravel4查询数据库并创建json以发送回ajax请求。这是当前正在发送服务器500错误的查询

public function results()
{
    $answers = $_POST['answers'];

    $data = DB::table('plans')
                ->join('plans_pricing', 'plans.id', '=', 'plans_pricing.plans_id')
                ->select('plans.company', 'plans_pricing.price', 'plans_pricing.term')
                ->whereIn('plans.id', $answers)
                ->get();

    echo json_encode($data);
}
我不确定为什么这个查询不起作用,但这甚至不是我问这个问题的原因。我需要知道如何获取嵌套的JSON对象,当我创建连接时,我相信我将为每个对象接收一个单独的对象,如下所示:

 |     company     |  price  |  term  |
  ------------------------------------
 |    company 1    |  4.95   | 1 year | 
 |    company 1    |  3.95   | 2 years|
如何使这个SQL查询返回一个嵌套的JSON对象,就像我上面描述的那样?我已经被这个问题困扰了两天了,我真的需要一些指导。谢谢

更新:


通过将
echo json_encode
更改为
return Response::json($data),服务器500错误得以修复

我从未使用过Laravel,但我认为这应该可以:

json_编码结果:

[{
    "company":"company 1",
    "rates":[{
      "price":4.95,"term":"1 year"
    },{
      "price":3.95,"term":"2 years"
    }]
}]

$answers的值是多少?通常是一个ID数组,如2、3、4。但是为了简单起见,只要假设
$answers=2
company1
id
已经验证了您的查询是否正确执行,比如检查它是否出错,或者
$data
实际上包含行,除了我控制台记录ajax请求时服务器500出错之外,我没有收到任何错误。在我添加joinIf之前,这个查询一直工作得很好,如果您使用的是laravel而不是echo json_encode,请使用return Response::json($data);另外,如果您使用的是chrome open开发者工具,那么当您发出ajax请求时,它会出现什么错误?我认为自己在PHP方面相当流利,但我对解决方案的几个部分感到困惑。为什么要声明
$output[]=array()foreach循环的内部和外部?为什么要使用
end($output)
而我最困惑的一行是
$currentItem=&$output[key($output)]这条线在做什么?再次感谢您的回答,它工作得很好,我只是对它的工作方式感到困惑,我将整个变量$output声明为一个数组(第1行)。在循环内部,如果公司是新公司,我在$output中创建一个新元素,并将其设置为空数组。然后我创建了一个对新数组元素的引用——这就是以“get a reference to the new added array element”为前缀的两行所做的。还有其他方法可以在不使用参考资料的情况下获得相同的结果。很有趣,感谢您的解释。我真的很感激it@James这个条件语句:
如果($datum->company!=$currentCompany)
意味着相同的$datum->company值不会在其他值之后再次出现吗?@JeaffreyGilbert更正。其想法是为每个公司创建一个数组元素,并将其他$data值添加到现有元素中(对于任何给定的公司)。为此,必须按公司对输入列表($data)进行排序,以便将同一公司的所有记录放在一起。
[{
    "company":"company 1",
    "rates":[{
      "price":4.95,"term":"1 year"
    },{
      "price":3.95,"term":"2 years"
    }]
}]