隨着laravel的預先加載,我可以這樣做Laravel - 伊格負載的非關係法(N + 1問題)
$forums = Forum::with('posts', 'threads')->get();
要獲得線程作爲其帖子和論壇沒有做很多查詢。
但是,我有一個方法獲取論壇的最後一篇文章。
這是我在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();
}
法這是我的部分觀點,以獲得最後一個線程:
@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
正如你可以看到,如果我做$subforum->lastThread()
了很多。我可以將其存儲在像$lastThread = $subforum->lastThread()
這樣的變量中,然後執行類似$lastThread->created_at
的操作來減少查詢的數量,但是我認爲將它與原始查詢一起包含以獲取所有論壇將會容易得多。
類似於:$forums = Forum::with('posts', 'threads', 'lastThread')->get();
也許?我曾嘗試爲此方法執行hasOne
關係,但這不起作用,因爲最後一個線程不一定屬於該特定子論壇。
無論如何,我該如何最好地解決這個N + 1問題?
謝謝。
是,上線已經包含在你的$論壇收藏(當然是一種關係)? – Shaz