2013-01-23 75 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)' 
相關問題