基于列值的 Foreach 内部的 Foreach

Posted

技术标签:

【中文标题】基于列值的 Foreach 内部的 Foreach【英文标题】:Foreach inside Foreach based on column value 【发布时间】:2021-06-24 01:46:12 【问题描述】:

我有一个这样的 sql 表知识库

id、categoryid、标题

id categoryid title
1 1 apple
2 1 fb
3 2 google
4 2 DB
5 3 Reebok

在我的 laravel 刀片中,我正在尝试创建一个如下所示的树视图

-1
--apple
--FB
-2
--google
--DB
-3
--Reebok

我的控制器执行基本查询并将整个表返回给视图。到目前为止,我是 laravel 的新手,我可以得到一个基本的表来工作

@foreach($knowledgebase as $key => $value)
<tr>
    <td>!! $knowledgebase ->id !!</td>
    <td>!! $knowledgebase ->title!!</td>
    <td>!! $knowledgebase ->categoryid !!</td>
</tr>
@endforeach

我将如何迭代 categroyid 列,显示第一个类别和所有子标题,然后转到下一个 categoryid。

更新

public function show($id) 

    //get article
    $knowledgebase = \App\Models\Knowledgebase::Where('knowledgebase_slug', request('knowledgebase_slug'))->first();

return view('knowledgebase', compact('knowledgebase'));


【问题讨论】:

你也可以展示你的控制器吗? 请你的模型和迁移,也许你必须自己加入模型/表 【参考方案1】:
You will need to retrieve in controller the categories before ($categories)
@foreach($categories as $category)
   <tr>
      <td> $category->id </td>
      <td> $category->title</td>
      <td> $category->categoryid </td>
   </tr>
@endforeach

【讨论】:

同一张桌子。当所有类别都在同一个表中时,我不确定如何单独检索类别。【参考方案2】:

无论如何,我设法通过在我的模型中添加函数 children 来解决这个问题。所以在我的模型中添加了

public function children()
return $this->hasMany('App\Models\Knowledgebase', 'categoryid');

在此之后,我只是在我的 foreach 中将其称为 foreach

@foreach($categories as $category)
<li><a href="#"> $category->title</a></li>
@if($category->children)
@foreach($category->children as $child)
<ul>
<li class="pl-3"><a href="#">  $child->title </a></li>
</ul>
@endforeach
@endif
@endforeach

【讨论】:

以上是关于基于列值的 Foreach 内部的 Foreach的主要内容,如果未能解决你的问题,请参考以下文章

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

让 foreach 运行一次

php中用foreach改变数组的值的问题

中断内部 foreach 循环并继续外部 foreach 循环