3

LaravelのEloquentORMのさまざまな関数と、それらが返すものに混乱しています。私はブログの投稿モデルを持っています-次のいずれかを書くと、すべての投稿の配列が返されます:

$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

すべてのメソッドは@returnphpdocにあるので、何を返す必要があるかすぐにわかります。ドキュメントも読むことをお勧めします。

于 2013-01-23T15:09:08.060 に答える