2013-01-23 40 views
0

我对Laravel的雄辩ORM中的各种函数以及它们返回的内容感到困惑。我有一个博客的一篇文章模型 - 如果我写的任何那么下面的我找回所有的桩的阵列:在Laravel中,哪些Eloquent方法返回数据并返回哪些对象?

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

但是,如果我一些连锁等方法,这是行不通的。例如,这给出了未处理的异常错误:“Method [all]没有在Query类上定义。”如果我使用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

这一切都很混乱!我该如何解决这个问题?这些函数中的每一个都会返回什么,以及如何正确链接它们?

+1

14.8k,对不对?我并不是说你不能在这里问这个问题,但是阅读代码可以为你自己解决问题,从而获得更好的学习效果。 – markus

+1

@ markus-tharkun也许,但我是Laravel的新手,并认为别人可能会比我更深入地解释一些外星人代码(从我所看到/听到的记录中没有很好的记录)。这对任何其他人都有用。 – DisgruntledGoat

+0

另外,我没有看到我的代表如何,4年获得14k是没有什么,就像平均每天1 upvote ... – DisgruntledGoat

回答

5

没有经过每一种可用的方法,简单的答案是找出输出的数据类型。

dd($whatever); 

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

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

这里有一个简短的文章,我写的口才,流利,可能会有帮助,以及:http://laravel.io/topic/17/what-are-fluent-and-eloquent

+0

那些不熟悉Laravel帮助函数的人,比如'dd()',会喜欢[helpers文档](http://four.laravel.com/docs/helpers#miscellaneous)。 – JSchaefer

0

当我运行此:

$user = User::where('email','=','[email protected]'); 
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)' 
相关问题