10

Laravel と雄弁な ORM を使用して、特定のユーザー (ログインしているユーザー) に属するすべての投稿と対応するコメントの配列またはオブジェクトを作成したいと考えています。結果は Response::eloquent(); で使用されます。JSON を返します。

基本的に疑似コードで:

All Posts by user ::with('comments').

また

Posts by Auth::user()->id ::with('comments').

ユーザーのテーブル、コメントテーブル、投稿テーブルを使用して、通常どおりデータベースをセットアップしました。コメント テーブルには post_id があり、posts テーブルには user_id があります。

Laravel なしでこれを行う長い道のりは、次のようになります。

SELECT * FROM posts WHERE user_id = 'user_id'
foreach($result as $post) {
    SELECT * FROM comments WHERE posts_id =  $post->id
    foreach($query as $comment) {
        $result[$i]->comments[$n] = $comment
    }
}

しかし、私は Laravel の Eloquent ORM でそれを達成したいと考えています。

4

1 に答える 1

13

ネストされた熱心なロードさえ必要ないように見えます。戻り値を持つクエリを変更するだけでよいので、次のようになります。

$posts = Post::with('comments')->where('user_id', '=', 1)->get();

Eloquent システムのほとんどのメソッドをデイジー チェーン接続できます。通常、メソッドは Fluent クエリ オブジェクトを返すだけです。

(私はそれをテストしていませんが、うまくいくとかなり確信しています。また、 ::all() でそれを行うことはできません。これは、->get() を呼び出すためです。ソースを掘り下げる必要があります。これを見つけるためのコード、私はEloquentのドキュメントがそれが何をしているのかについて言及しているとは思わない.)

また、Eager Loading Documentationでは、ネストされた熱心な読み込みについて説明しているため、すべてのユーザーを投稿とコメントで読み込むことができます。

ネストされたリレーションシップを熱心にロードすることもできます。たとえば、Author モデルに「contacts」関係があるとします。次のように Book モデルから両方のリレーションシップを熱心にロードできます。

$books = Book::with(array('author', 'author.contacts'))->get();
于 2013-01-12T05:12:52.827 に答える