2014-01-13 52 views
1

我對Laravel相當新,我試圖從數據庫中的表中提取嵌套的json。Laravel 4 - 生成嵌套的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'); 
}); 

任何提示或指針將非常appricated。

謝謝!

回答

0

嘗試:

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

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

感謝您的答覆。沒有那個運氣。它給一個錯誤調用一個非對象的成員函數toJson()。我認爲使用toJson可能是多餘的,因爲如果我返回$ bikes,它將返回json,但沒有格式化我需要的方式。 – BarryWalsh

0

好吧,我想通了這一點,這不是嵌套的,但它會與角工作,我需要的方式。

這是因爲使用排序依據,如下面一樣簡單:

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" 
} 
] 

有了,我可以使用的角度來填充選擇使用opgroups:

<select ng-model="todos" ng-options="t.sub_category group by t.parent_category for t in todos"></select> 
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`