英文:
How to get child under sub-category and sub-category user category in JSON Laravel
问题
这是一个非常常见的问题,但我无法将其以JSON格式制作成API。我有一个名为Category的表,其中存储了三层类别。类别->子类别->子类。
我希望在API中以以下格式获取这些数据。
类别
子类别1
子类别2
子类别2-1
子类别2-2
子类别3
我尝试了以下代码:
$allData = array();
// 获取所有父类别
$categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
foreach ($categories as $key => $sub) {
// 逐个获取子类别
$allData[$key]['parent'] = $sub->name;
$subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
$subCat = array();
// 设置父类别标题
foreach ($subCategory as $k => $subcat) {
$subCat[$subcat->id] = $subcat->name;
}
// 设置子类别数组
$allData[$key]['subcategory'] = $subCat;
}
return $allData;
我得到了这个结果,但我不知道如何获取子类别的值。
英文:
This very common question but I am not able to make it in JSON Format for API. I a Table Category where I stored three layers of Category. Category->subcategory->child.
I want to get this in API in Format.
Something like.
Category
sub-category-1
sub-category-2
child-2-1
child-2-2
sub-category-3
I try with code
$allData = array();
// get all parent category
$categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
foreach ($categories as $key=>$sub) {
// now take one by one it's child category
$allData[$key]['parent'] = $sub->name;
$subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
$subCat = array();
// set parent category title
foreach ($subCategory as $k=>$subcat) {
$subCat[$subcat->id] = $subcat->name;
}
// set subcategory array
$allData[$key]['subcategory'] = $subCat;
}
return $allData;
I got this result not I don't know how to get child value
database look like
答案1
得分: 1
这是如何完成的示例。
$allData = array();
// 获取所有父类别
$categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
foreach ($categories as $key => $sub) {
// 逐个获取其子类别
$allData[$key]['parent'] = $sub->name;
$subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
$subCat = array();
// 设置父类别标题
foreach ($subCategory as $k => $subcat) {
$subCat[$subcat->id] = $subcat->name;
// 子类别的子类别
$children = Category::where('status', 1)->where('parent_id', '=', $subcat->id)->get();
$child = array();
if ($children) {
foreach ($children as $k1 => $val) {
$child[$val->id] = $val->name;
$allData[$key]['subcategory'][$subcat->id]['child'] = $child;
}
}
}
// 设置子类别数组
$allData[$key]['subcategory'] = $subCat;
}
return $allData;
请尝试这种方式。将您的 JSON 转换为数组,并使用以下方式获取子值。
$ar = json_decode($data, true);
foreach ($ar as $value) {
echo $value['parent'].'<br>';
foreach ($value['child'] as $child) {
echo ' '.$child.'<br>';
}
}
这将输出如下结果:
test
A
B
C
D
E
test1
G
H
I
J
K
英文:
Here is how you can do it.
$allData = array();
// get all parent category
$categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
foreach ($categories as $key=>$sub) {
// now take one by one it's child category
$allData[$key]['parent'] = $sub->name;
$subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
$subCat = array();
// set parent category title
foreach ($subCategory as $k=>$subcat) {
$subCat[$subcat->id] = $subcat->name;
//children of subcat
$children = Category::where('status', 1)->where('parent_id', '=', $subcat->id)->get();
$child = array();
if($children){
foreach($children as $k1=>$val){
$child[$val->id] = $val->name;
$allData[$key]['subcategory'][$subcat->id]['child'] = $child;
}
}
}
// set subcategory array
$allData[$key]['subcategory'] = $subCat;
}
return $allData;
please try this way. convert your json into array and use this to get child values
$ar = json_decode($data,true);
foreach($ar as $value){
echo $value['parent'].'<br>';
foreach($value['child'] as $child){
echo '&nbsp;'.$child.'<br>';
}
}
This will output this
test
A
B
C
D
E
test1
G
H
I
J
K
答案2
得分: 1
最终,我解决了这个问题:
$parents = Category::where('parent_id', 0)->where('status', 1)->orderBy('sort_order', 'asc')->get();
foreach ($parents as $parent) {
$childs = Category::where('parent_id', $parent->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
if (count($childs) > 0) {
$subCat = array();
$players = array();
$roster[$parent->name] = $players;
foreach ($childs as $i => $child) {
$subchilds = Category::where('parent_id', $child->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
if (count($subchilds) > 0) {
$roster[$parent->name][$child->name] = $subCat;
foreach ($subchilds as $subchild) {
$roster[$parent->name][$child->name][$subchild->id] = $subchild->name;
}
} else {
$roster[$parent->name][$child->name] = $players;
}
}
}
}
return $roster;
英文:
Finally, I solved this
$parents = Category::where('parent_id', 0)->where('status', 1)->orderBy('sort_order', 'asc')->get();
foreach ($parents as $parent) {
$childs = Category::where('parent_id', $parent->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
if (count($childs) > 0) {
$subCat = array();
$players = array();
$roster[$parent->name] = $players;
foreach ($childs as $i => $child) {
$subchilds = Category::where('parent_id', $child->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
if (count($subchilds) > 0) {
$roster[$parent->name][$child->name] = $subCat;
foreach ($subchilds as $subchild) {
$roster[$parent->name][$child->name][$subchild->id] = $subchild->name;
}
}else{
$roster[$parent->name][$child->name] = $players;
}
}
}
}
return $roster;
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论