Laravel:Eloquent all()不返回一个对象数组

时间:2014-02-16 10:43:22

标签: php mysql laravel

我正在尝试构建一个简单的论坛系统。

我有一个名为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的类别,我可以将其用作对象。

2 个答案:

答案 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(这在框架中很常见)。

您可以使用CollectiontoArray()等方法将toJson()转换为其他格式;但您也可以使用count()等方法迭代结果fetch(),或使用get()

获取特定条目

修改

虽然您无法直接在Collection上进行迭代,但您可以使用getIterator()方法将其转换为可迭代结构,该方法返回SPL ArrayIterator对象