我正在尝试构建一个简单的论坛系统。
我有一个名为Category.php的模型,我在其中定义表并扩展Eloquent。
我有一个CategoryController.php,它是一个资源丰富的控制器,在index()方法中,我正在做:
$categories = Category::all();
我认为应该返回一个对象数组。这在我的不同项目中运作良好。
然而,当我尝试通过foreach运行时,没有任何回应。我已经尝试将控制器和模型分别重命名为ForumController和Form,并且它可以立即运行。
有什么想法吗?也许Laravel保留了类别名称并覆盖了我想要的功能?
CategoryController.php:
<?php
class CategoryController extends \BaseController {
protected $layout = 'master';
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
//
$categories = Category::all();
$this->layout->content = View::make('category.index', array('categories' => $categories));
}
Category.php(型号):
<?php
class Category extends Eloquent {
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'categories';
}
类别/ index.blade.php(查看):
@section('content')
<ul>
@foreach ($categories as $category)
<li><a href="/category/{{ $category->slug }}">{{ $category->name }}</a></li>
@endforeach
</ul>
@stop
我的数据库设置正确。当我运行$ category = Category :: find(1);它正确返回id为1的类别,我可以将其用作对象。
答案 0 :(得分:2)
您可以迭代Category::all();
。 Laravels Collection
类实现以下接口:
ArrayAccess, ArrayableInterface, Countable, IteratorAggregate, JsonableInterface
这意味着:
foreach(Category::all() as $category) {
var_dump($category);
}
可行,返回的Eloquent\Collection
扩展了实现上述接口的Support\Collection
类。
查看Support\Collection
中的Illuminate
课程。
答案 1 :(得分:1)
你是对的,当返回多个结果时,Eloquent返回Collection
(这在框架中很常见)。
您可以使用Collection
或toArray()
等方法将toJson()
转换为其他格式;但您也可以使用count()
等方法迭代结果fetch()
,或使用get()
修改强>
虽然您无法直接在Collection
上进行迭代,但您可以使用getIterator()
方法将其转换为可迭代结构,该方法返回SPL ArrayIterator对象