2016-12-14 8 views
1

いいえ、

私はこれを理解することはできません。 Eloquentモデルは私にとって初めてのものです。

特定の投稿のコメントを取得しようとしています。

これは私のポストモデルです:

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Post extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 

    public function likes() 
    { 
     return $this->hasMany('App\Like'); 
    } 

    public function comments() 
    { 
     return $this->hasMany('App\Comment'); 
    } 
} 

コメントモデル:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Comment extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 
    public function post() 
    { 
     return $this->belongsTo('App\Post'); 
    } 
} 

ルート:

public function getDashboard(){ 
     $posts = Post::orderBy('created_at', 'desc')->get(); // MySQL ORDER BY 
     $comments = Comment::orderBy('created_at', 'desc')->get(); 

     return view('dashboard', ['posts' => $posts], ['comments' => $comments]); 
    } 

($のコmmentsは不要かもしれません)

ビュー:?私は、エラーメッセージが表示されました

@while($comments->post_id = $post->id) 

    <p>{{$comments->body}}</p> 

@endwhile 

「未定義のプロパティ:\データベースを照らすを\私が使用して、コメントをループしようとした

@foreach($posts as $post) 

     <article class="post" data-postid=" {{ $post->id }} "> 
      <p>{{ $post->body }}</p> 
      <div class="info"> 
       Posted by {{$post->user->first_name}} on {{ $post->created_at }} 
      </div> 
</article> 

Eloquent \ Collection :: $ body "コメント表には" body "という名前の列があります。

答えて

2
@foreach($post->comments as $comment) 

あなたは何ですか?あなたにもこれをスピードアップするために、クエリで積極的なロードを使用することができますと

Post::with('comments')->orderBy('created_at', 'desc')->get() 
+0

がそれを手に入れた、 :コレクションの

Post::orderBy('created_at', 'desc') ->with(['user', 'comments' => function ($q) { $q->orderBy('created_at', 'desc'); }])->get(); 

そしてitarate:このコードはわずか3クエリを作成します。 body $ comment) '、しかしそれは私にエラーメッセージを与えました。 あなたのコードを使用し、foreachループ内で本体をフェッチするときに動作します '$ comment ['body']' ありがとう! –

+1

Alexeyの答えに注意を払うだけでなく、クエリを保存するためにユーザーを熱心に読み込むこともできます。 – Devon

2

あなたのコードがあるため$post->user->first_nameの複数のクエリを作成します。たとえば、70の投稿がある場合、コードは72のクエリを作成します。これはひどいです。

eager loadingを使用して、コメントとユーザーの投稿を読み込むほうがずっと良いです。私は `@foreach($ポスト> comments->を使用する前に、同じようなことを試してみました

@foreach ($posts as $post) { 
    <article class="post" data-postid=" {{ $post->id }} "> 
    .... 
    @foreach ($post->comments as $comment) { 
     $comment->content; 
    } 
} 
+0

私はあなたに私の詳細を上回ってくれますね:) – Devon

関連する問題