Laravel 4 - 生成嵌套json

时间:2014-01-13 23:32:13

标签: php json laravel laravel-4

我是Laravel的新手,我正在尝试从数据库中的表中提取嵌套的json。

基本上我在表中有一个列用于父类别,另一列用于子类别。

我想生成类似于:

的json
{
"Category 1":[
    {"sub category": "sub category 1"},
    {"sub category": "sub category 2"},
    {"sub category": "sub category 3"},
    {"sub category": "sub category 4"},
    {"sub category": "sub category 5"},
    {"sub category": "sub category 6"},
    {"sub category": "sub category 7"}
],
"Category 2":[
    {"sub category": "sub category 8"},
    {"sub category": "sub category 10"}
],
"Category 3": [
    {"sub category": "sub category 9"}
]
}

我不太确定如何解决这个问题,因为我仍然需要掌握框架的基础知识。我尝试了以下不能完成这项任务的工作。

Route::get('subcategories', function(){
  return Bikes::
  groupBy('parent_category')->
  lists('sub_category');
});

任何提示或指示都会非常适合。

谢谢!

3 个答案:

答案 0 :(得分:0)

尝试:

Route::get('subcategories', function()
{
    $bikes = Bikes::groupBy('parent_category')->lists('sub_category');

    return $bikes->toJson();
});

答案 1 :(得分:0)

好吧我想出来了,它没有嵌套,但它会以我需要的方式使用角度。

就像使用orderBy一样简单:

return Todo::OrderBy('parent_category')->select('parent_category', 'sub_category')->get();

这让我:

 [
{
parent_category: "Chores",
sub_category: "Shop"
},
{
parent_category: "Chores",
sub_category: "Cleaning"
},
{
parent_category: "Work",
sub_category: "Development"
},
{
parent_category: "Work",
sub_category: "JS"
}
]

有了这个,我可以使用angular来使用以下选项填充opgroup:

<select ng-model="todos" ng-options="t.sub_category group by t.parent_category for t in todos"></select>

答案 2 :(得分:0)

您可以为自引用表创建模型,如下所示:

class Category extends Eloquent {
    public function parent()
    {
        return $this->belongsTo('Category', 'parent_id');
    }

    public function children()
    {
        return $this->hasMany('Category', 'parent_id');
    }
}

使用它:

$category = Category::find(1);
$categoryParent = $category->parent()->first(); // Gets parent category`
$categoryChildren = $user->children()->get(); // Gets the children`