【问题标题】:for loop does not iteration in laravel 5.1for 循环不会在 laravel 5.1 中迭代
【发布时间】:2015-11-16 19:22:28
【问题描述】:

我在我的项目中使用 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

【问题讨论】:

  • dd(count($category2));看看它打印了什么......还在for循环中返回一个视图?你到底想达到什么目的? return 语句终止函数的执行并将控制权返回给调用函数。调用函数在调用之后的点处继续执行。 return 语句也可以将值返回给调用函数。 google.com/…
  • 分类和帮助中心是什么关系?
  • $category = Category::join('help_center_table','help_center_table.category_id','=','category_table.id')-&gt;get();可以添加select()指定列

标签: php laravel


【解决方案1】:

您不能使用与您正在迭代的数组相同的变量进行迭代 ($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'));
}

然后在你看来:

@foreach($categories as $category)

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

@endforeach

【讨论】:

  • 您的示例中似乎没有任何变化,只是您传递了一个数组变量...
  • 抱歉,将视图移出循环,因此您实际上获得了完整的类别,而不是第一次循环迭代返回的任何内容。您还应该注意到我已经更改了视图中的变量名称。
  • 此代码在视图文件中显示错误未定义属性:$id
  • 好吧,我真的不知道您的 HelpCenter 对象中有什么。它没有 id 列吗?
【解决方案2】:

当它为一个类别运行时,您将从循环中返回。只需在闭合循环大括号后放置您的返回线。像这样..

    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'));
    }

希望这能解决您的问题。

【讨论】:

  • 在您的示例中 $category 将传递单个对象而不是对象集合。它将覆盖这些值并传递最后一个集合对象。
  • 我已经更新了这个答案。我认为现在它应该可以正常工作了。
【解决方案3】:

最好使用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'));

}

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2012-01-05
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多