У меня есть система форумов с множеством категорий, которая имеет много потоков, которые имеют много сообщений.Laravel recursion - найти «последнее сообщение»
Итак, с данным форумом, я должен уметь выяснить последнее сообщение, которое имеет конкретный форум. На форуме может быть много подфорумов (они же дети). Я только смог сделать часть этого.
Таблица демонстрационный:
| id | parent_id | name | is_category |
|----|-----------|-------------------|-------------|
| 1 | 0 | Suggestions | 1 |
| 2 | 1 | site suggestions | 0 |
| 3 | 1 | forum suggestions | 0 |
| 4 | 2 | bugs | 0 |
Вот мой код:
public function lastPost()
{
foreach ($this->threads()->orderBy('updated_at')->get() as $thread) {
$post = $thread->lastPost();
}
if ($this->hasSubforum()) {
foreach ($this->subforums as $subforum) {
$post = $subforum->lastPost();
}
}
return $post;
}
Как вы можете видеть, lastPost()
называется, пока форум не имеет больше подфорумов. Я получаю последнее сообщение из последней темы в подфоруме. Все идет нормально. Тем не менее, последним постом будет порядок, в котором находится подфорум. Поэтому, если последнее сообщение было во втором последнем подфоруме, оно возвращает последнее сообщение последнего подфорума, так как последний последний вопрос был возвращен последним в рекурсии.
как я могу это исправить?
Спасибо!
проверить дату и установить только «$ post», если дата более поздняя (или даже «id» сообщения - при условии, что она есть, если она является серийной)? –
Возможно, вы используете последний метод в коллекции $ this-> threads() ... etc, правильно? https://laravel.com/docs/5.1/collections#method-last – ExohJosh