3

我对 Laravel 的 Eloquent ORM 中的各种函数以及它们返回的内容感到困惑。我有一个博客的帖子模型 - 如果我写了以下任何内容,那么我会返回所有帖子的数组:

$posts = Post::all();
$posts = Post::get();
$posts = Post::with('user')->all();

但是,如果我链接其他一些方法,它就不起作用。例如,这会给出一个未处理的异常错误:“方法 [all] 未在 Query 类上定义。”

$posts = Post::with('user')->order_by('updated_at', 'desc')->all();

如果我使用 paginate 函数,我根本不会得到结果数组。

$posts = Post::with('user')->order_by('updated_at', 'desc')->paginate(5);

// index.blade.php
@foreach ($posts as $post)
    {{ $post->id }}
@endforeach

我收到错误消息:“尝试获取非对象的属性”。原来数据在$posts->results,不是$posts

这一切都非常令人困惑!我该如何解决这个问题?这些函数中的每一个返回什么以及如何正确链接它们?

4

3 回答 3

6

无需遍历所有可用的方法,简单的答案就是找出输出的数据类型。

dd($whatever);

如果它是一个对象,那么找到该对象是一个实例的类,并了解该类是如何工作的。

如果它是一个查询对象,你可以链接它,如果它是一个数组或 null 你不能。如果它是模型类的实例,那么您可以链接它,但您只能调用模型类或派生类中存在的方法。

这是我写的一篇关于 Eloquent 和 Fluent 的简短文章,可能也有帮助: http: //laravel.io/topic/17/what-are-fluent-and-eloquent

于 2013-01-23T15:09:03.630 回答
4

当我运行这个:

$user = User::where('email','=','test@example.com');
dd($user); # object(Illuminate\Database\Eloquent\Builder)

// After: 
dd($user->get()); # object(Illuminate\Database\Eloquent\Collection)

// And finally, to get model object:
dd($user->get()->first()); # object(App\User)
于 2017-08-10T11:30:32.300 回答
-1

通过查看源代码,它的文档并没有那么糟糕:

https://github.com/laravel/laravel/blob/master/laravel/database/eloquent/query.php#L98

每个方法都有@return他们的 phpdoc,所以你立即知道他们应该返回什么。我建议您也阅读文档

于 2013-01-23T15:09:08.060 回答