laravelの熱心なロードでは、私は多くのクエリを実行することなく、その投稿やフォーラムなどのスレッドを取得するにはLaravel - イーガーロード非関係法(N + 1問題)
$forums = Forum::with('posts', 'threads')->get();
ような何かを行うことができます。
しかし、フォーラムの最後の投稿を取得する方法があります。あなたが見ることができるように、私は$subforum->lastThread()
多くのことをやっている場合は、
@if ($subforum->lastThread())
<a href="{{ viewThread($subforum->lastThread()) }}">
{{ $subforum->lastThread()->title }}
</a>
<br>
<a href="{{ viewPost($subforum->lastThread()->lastPost) }}"> {{ trans('forum/post.last_post') }}
:</a>
<a href="{{ viewProfile($subforum->lastThread()->lastPost->user) }}"> {{ $subforum->lastThread()->lastPost->user->info() }}</a>
<br>
{{ $subforum->lastThread()->lastPost->created_at }}
@endif
:
これは、これが最後のスレッドを得るために、私の部分図であるForum.php
public function lastThread()
{
$forums = $this->arrayOfIDs(); // get array of all ids, even subforum's subforums.
return Thread::whereIn('forum_id', $forums)->orderBy('updated_at', 'desc')->first();
}
の私の方法です。私は$lastThread = $subforum->lastThread()
のような変数にそれを格納してから、クエリの数を減らすために$lastThread->created_at
のようなことをしますが、私はすべてのフォーラムを取得するために元のクエリを含めるだけであれば、ずっと簡単だと思いました。
何かのように:$forums = Forum::with('posts', 'threads', 'lastThread')->get();
おそらく?私はこのメソッドのhasOne
リレーションを実行しようとしましたが、最後のスレッドが必ずしもその特定のサブフォーラムに属していないため動作しません。
とにかく、このN + 1の問題を解決するにはどうすればよいですか?
ありがとうございます。
最後のスレッドがすでにあなたの$に含まれていることですフォーラムのコレクション(もちろん関係として)? – Shaz