for循环不会在laravel 5.1中迭代

时间:2015-11-16 10:37:02

标签: php laravel

我正在为我的项目使用laravel 5.1。 我的问题是根据category_id显示数据表类别的外键。 此代码仅获取具有category_id 1的DATA,并且此循环仅在$ i = 1处运行,之后它们不能迭代。 请帮我解决这个问题。

我的控制器代码是: -

public function category()
{
 $category2=Category::all();

    for($i=1;$i<=count($category2);$i++)
    {
    $category=HelpCenter::where('category_id','=',$i)->get();

    return view('folder/category',compact('category'));

    }

}

我的观看代码是: -

   @foreach($category as $category)

    <li><a href="/category/{{$category->id}}"> {{$category->questions}}</a></li>

    @endforeach

3 个答案:

答案 0 :(得分:0)

您不能使用相同的变量进行迭代,因为您正在迭代的数组(<div class="option-box"> <div class="radio"> <label> <input id="ctl00_PageContent_ctl00_KitsList_ctl03_KitComponent_4_0" name="ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4" value="0" checked="checked" type="radio" /> No Top </label> </div> <div class="radio"> <label> <input id="ctl00_PageContent_ctl00_KitsList_ctl03_KitComponent_4_1" name="ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4" value="8" onclick="javascript:setTimeout('__doPostBack(\'ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4$1\',\'\')', 0)" type="radio" /> Black Top </label> </div> <div class="radio"> <label> <input id="ctl00_PageContent_ctl00_KitsList_ctl03_KitComponent_4_2" name="ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4" value="9" onclick="javascript:setTimeout('__doPostBack(\'ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4$2\',\'\')', 0)" type="radio" /> White Top </label> </div> <div class="radio"> <label> <input id="ctl00_PageContent_ctl00_KitsList_ctl03_KitComponent_4_3" name="ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4" value="10" onclick="javascript:setTimeout('__doPostBack(\'ctl00$PageContent$ctl00$KitsList$ctl03$KitComponent_4$3\',\'\')', 0)" type="radio" /> Silver Top </label> </div> </div> <div class="option-box"> <div class="checkbox"> <label> <input id="ctl00_PageContent_ctl00_KitsList_ctl04_KitComponent_10_0" name="ctl00$PageContent$ctl00$KitsList$ctl04$KitComponent_10$0" onclick="javascript:setTimeout('__doPostBack(\'ctl00$PageContent$ctl00$KitsList$ctl04$KitComponent_10$0\',\'\')', 0)" value="11" type="checkbox" /> Backdoor </label> </div> <div class="checkbox"> <label> <input id="ctl00_PageContent_ctl00_KitsList_ctl04_KitComponent_10_1" name="ctl00$PageContent$ctl00$KitsList$ctl04$KitComponent_10$1" onclick="javascript:setTimeout('__doPostBack(\'ctl00$PageContent$ctl00$KitsList$ctl04$KitComponent_10$1\',\'\')', 0)" value="12" type="checkbox" /> Topdoor </label> </div> </div> )。因此,你必须得到某种错误。

话虽这么说,你不能用控制器返回多个视图。你将只返回你得到的第一个结果。

你应该做的是这样的事情:

$category as $category

然后在你看来:

public function category()
{
    $category2=Category::all();
    $categories = [];
    for($i=1;$i<=count($category2);$i++)
    {
        $categories[]=HelpCenter::where('category_id','=',$i)->get();
    }
    return view('folder/category',compact('categories'));
}

答案 1 :(得分:0)

当你为一个类别运行时,你将从循环返回。只需在关闭循环括号后放置返回行。像这样......

    public function category()
    {
      $category2=Category::all();
      for($i=1;$i<=count($category2);$i++)
      {
        $category[]=HelpCenter::where('category_id','=',$i)->get();
      }
      return view('folder/category',compact('category'));
    }

希望这能解决您的问题。

答案 2 :(得分:0)

最好使用CategoryHelpCenter之间的关系。有关详细信息Check Here

但是如果你想这样做,那么我认为这是更好的方法:

public function category()
{
   $category2=Category::all();
   $category = [];
   foreach($category2 as $cat ){ 
        $category[] = HelpCenter::where('category_id','=',$cat->id)->get();
   } 
    return view('folder/category',compact('category'));

}