如何在JSON Laravel中获取子类别和子类别用户类别下的子类别?

huangapple go评论106阅读模式
英文:

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

我尝试了以下代码:

  1. $allData = array();
  2. // 获取所有父类别
  3. $categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
  4. foreach ($categories as $key => $sub) {
  5. // 逐个获取子类别
  6. $allData[$key]['parent'] = $sub->name;
  7. $subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
  8. $subCat = array();
  9. // 设置父类别标题
  10. foreach ($subCategory as $k => $subcat) {
  11. $subCat[$subcat->id] = $subcat->name;
  12. }
  13. // 设置子类别数组
  14. $allData[$key]['subcategory'] = $subCat;
  15. }
  16. 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.

  1. Category
  2. sub-category-1
  3. sub-category-2
  4. child-2-1
  5. child-2-2
  6. sub-category-3

I try with code

  1. $allData = array();
  2. // get all parent category
  3. $categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
  4. foreach ($categories as $key=>$sub) {
  5. // now take one by one it's child category
  6. $allData[$key]['parent'] = $sub->name;
  7. $subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
  8. $subCat = array();
  9. // set parent category title
  10. foreach ($subCategory as $k=>$subcat) {
  11. $subCat[$subcat->id] = $subcat->name;
  12. }
  13. // set subcategory array
  14. $allData[$key]['subcategory'] = $subCat;
  15. }
  16. return $allData;

I got this result not I don't know how to get child value

如何在JSON Laravel中获取子类别和子类别用户类别下的子类别?

database look like

如何在JSON Laravel中获取子类别和子类别用户类别下的子类别?

答案1

得分: 1

这是如何完成的示例。

  1. $allData = array();
  2. // 获取所有父类别
  3. $categories = Category::where(['status' => 1, 'parent_id' => 0])->get();
  4. foreach ($categories as $key => $sub) {
  5. // 逐个获取其子类别
  6. $allData[$key]['parent'] = $sub->name;
  7. $subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
  8. $subCat = array();
  9. // 设置父类别标题
  10. foreach ($subCategory as $k => $subcat) {
  11. $subCat[$subcat->id] = $subcat->name;
  12. // 子类别的子类别
  13. $children = Category::where('status', 1)->where('parent_id', '=', $subcat->id)->get();
  14. $child = array();
  15. if ($children) {
  16. foreach ($children as $k1 => $val) {
  17. $child[$val->id] = $val->name;
  18. $allData[$key]['subcategory'][$subcat->id]['child'] = $child;
  19. }
  20. }
  21. }
  22. // 设置子类别数组
  23. $allData[$key]['subcategory'] = $subCat;
  24. }
  25. return $allData;

请尝试这种方式。将您的 JSON 转换为数组,并使用以下方式获取子值。

  1. $ar = json_decode($data, true);
  2. foreach ($ar as $value) {
  3. echo $value['parent'].'<br>';
  4. foreach ($value['child'] as $child) {
  5. echo '&nbsp;'.$child.'<br>';
  6. }
  7. }

这将输出如下结果:

  1. test
  2. A
  3. B
  4. C
  5. D
  6. E
  7. test1
  8. G
  9. H
  10. I
  11. J
  12. K
英文:

Here is how you can do it.

  1. $allData = array();
  2. // get all parent category
  3. $categories = Category::where([&#39;status&#39; =&gt; 1, &#39;parent_id&#39; =&gt; 0])-&gt;get();
  4. foreach ($categories as $key=&gt;$sub) {
  5. // now take one by one it&#39;s child category
  6. $allData[$key][&#39;parent&#39;] = $sub-&gt;name;
  7. $subCategory = Category::where(&#39;status&#39;, 1)-&gt;where(&#39;parent_id&#39;, &#39;=&#39;, $sub-&gt;id)-&gt;get();
  8. $subCat = array();
  9. // set parent category title
  10. foreach ($subCategory as $k=&gt;$subcat) {
  11. $subCat[$subcat-&gt;id] = $subcat-&gt;name;
  12. //children of subcat
  13. $children = Category::where(&#39;status&#39;, 1)-&gt;where(&#39;parent_id&#39;, &#39;=&#39;, $subcat-&gt;id)-&gt;get();
  14. $child = array();
  15. if($children){
  16. foreach($children as $k1=&gt;$val){
  17. $child[$val-&gt;id] = $val-&gt;name;
  18. $allData[$key][&#39;subcategory&#39;][$subcat-&gt;id][&#39;child&#39;] = $child;
  19. }
  20. }
  21. }
  22. // set subcategory array
  23. $allData[$key][&#39;subcategory&#39;] = $subCat;
  24. }
  25. return $allData;

please try this way. convert your json into array and use this to get child values

  1. $ar = json_decode($data,true);
  2. foreach($ar as $value){
  3. echo $value[&#39;parent&#39;].&#39;&lt;br&gt;&#39;;
  4. foreach($value[&#39;child&#39;] as $child){
  5. echo &#39;&amp;nbsp;&#39;.$child.&#39;&lt;br&gt;&#39;;
  6. }
  7. }

This will output this

  1. test
  2. A
  3. B
  4. C
  5. D
  6. E
  7. test1
  8. G
  9. H
  10. I
  11. J
  12. K

答案2

得分: 1

最终,我解决了这个问题:

  1. $parents = Category::where('parent_id', 0)->where('status', 1)->orderBy('sort_order', 'asc')->get();
  2. foreach ($parents as $parent) {
  3. $childs = Category::where('parent_id', $parent->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
  4. if (count($childs) > 0) {
  5. $subCat = array();
  6. $players = array();
  7. $roster[$parent->name] = $players;
  8. foreach ($childs as $i => $child) {
  9. $subchilds = Category::where('parent_id', $child->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
  10. if (count($subchilds) > 0) {
  11. $roster[$parent->name][$child->name] = $subCat;
  12. foreach ($subchilds as $subchild) {
  13. $roster[$parent->name][$child->name][$subchild->id] = $subchild->name;
  14. }
  15. } else {
  16. $roster[$parent->name][$child->name] = $players;
  17. }
  18. }
  19. }
  20. }
  21. return $roster;

如何在JSON Laravel中获取子类别和子类别用户类别下的子类别?

英文:

Finally, I solved this

  1. $parents = Category::where(&#39;parent_id&#39;, 0)-&gt;where(&#39;status&#39;, 1)-&gt;orderBy(&#39;sort_order&#39;, &#39;asc&#39;)-&gt;get();
  2. foreach ($parents as $parent) {
  3. $childs = Category::where(&#39;parent_id&#39;, $parent-&gt;id)-&gt;where(&#39;status&#39;, 1)-&gt;orderBy(&#39;sort_order&#39;, &#39;asc&#39;)-&gt;get();
  4. if (count($childs) &gt; 0) {
  5. $subCat = array();
  6. $players = array();
  7. $roster[$parent-&gt;name] = $players;
  8. foreach ($childs as $i =&gt; $child) {
  9. $subchilds = Category::where(&#39;parent_id&#39;, $child-&gt;id)-&gt;where(&#39;status&#39;, 1)-&gt;orderBy(&#39;sort_order&#39;, &#39;asc&#39;)-&gt;get();
  10. if (count($subchilds) &gt; 0) {
  11. $roster[$parent-&gt;name][$child-&gt;name] = $subCat;
  12. foreach ($subchilds as $subchild) {
  13. $roster[$parent-&gt;name][$child-&gt;name][$subchild-&gt;id] = $subchild-&gt;name;
  14. }
  15. }else{
  16. $roster[$parent-&gt;name][$child-&gt;name] = $players;
  17. }
  18. }
  19. }
  20. }
  21. return $roster;

如何在JSON Laravel中获取子类别和子类别用户类别下的子类别?

huangapple
  • 本文由 发表于 2020年1月3日 19:34:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/59577909.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定