在 Laravel 中,哪些 Eloquent 方法返回数据,哪些返回对象?
Posted
技术标签:
【中文标题】在 Laravel 中,哪些 Eloquent 方法返回数据,哪些返回对象?【英文标题】:In Laravel, which Eloquent methods return data and which return objects? 【发布时间】:2013-01-07 02:38:00 【问题描述】:我对 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
。
这一切都非常令人困惑!我该如何解决这个问题?这些函数中的每一个都返回什么?如何正确链接它们?
【问题讨论】:
14.8k,对吗?我不是说你不能在这里问这个问题,而是阅读代码会解决你的问题,对你自己有更好的学习效果。 @markus-tharkun 也许,但我是 Laravel 的新手,我认为其他人可能会比我深入研究一些外星代码更好地解释它(我所拥有的并没有很好地记录看到/听到)。它对其他人有用。 另外,我看不出我的代表有多重要,4 年内获得 14k 不算什么,这就像平均每天 1 次投票... 老实说,我认为文档已经足够了。有一个入门类型指南,然后是 API。 laravel.com/api 有了这些和 PHP 经验,您可以非常快速地学习该框架。 @ShawnMcCool 这不是对文档进行扩展讨论的地方,但我非常不同意。我知道你对 Laravel 的参与度很高,因此可能很难从外部查看它,但是文档和代码中缺少一些必需/有用的关键信息。 (尽管我很喜欢这个框架,所以我会尽力帮助解决这个问题。) 【参考方案1】:当我运行这个时:
$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)
【讨论】:
【参考方案2】:通过查看源代码,文档并没有那么糟糕:
https://github.com/laravel/laravel/blob/master/laravel/database/eloquent/query.php#L98
每个方法的 phpdoc 中都有 @return
,因此您可以立即知道它们应该返回什么。我建议你也阅读docs。
【讨论】:
这意味着,@DisgruntledGoat,甚至您的 IDE 也应该准确地告诉您可以用它做什么和不能做什么。我猜你也需要更新你的工具链?【参考方案3】:无需遍历所有可用的方法,简单的答案就是找出输出的数据类型。
dd($whatever);
如果它是一个对象,则找到该对象作为实例的类并了解该类的工作原理。
如果它是一个查询对象,你可以链接它,如果它是一个数组或 null 你不能。如果它是模型类的实例,那么您可以链接它,但您只能调用模型类或派生类中存在的方法。
这是我写的一篇关于 Eloquent 和 Fluent 的简短文章,可能也会有所帮助:http://laravel.io/topic/17/what-are-fluent-and-eloquent
【讨论】:
不熟悉dd()
等 Laravel 辅助函数的人会喜欢 helpers documentation。以上是关于在 Laravel 中,哪些 Eloquent 方法返回数据,哪些返回对象?的主要内容,如果未能解决你的问题,请参考以下文章
在最近的关系记录中搜索 - Laravel (Eloquent)
如何使用 eloquent 在 laravel 中编写多个连接