2016-03-15 2 views
0

У меня есть столбики и темы. Мое отношение: posts.thread_id = threads.id.Laravel - Orderby created_t date в стол сообщения из таблицы тем

Я пытаюсь создать форум с темами с большим количеством сообщений. Я хочу заказать список по дате created_at.

Итак: создаю новое сообщение, и теперь оно связано с нитью. Когда я перехожу на главную страницу форума, он должен заказывать потоки, используя обновленные сообщения в каждом потоке. Другими словами, это похоже на то, когда кто-то отвечает потоку в переполнении стека, он попадает на верх.

Надеюсь, это имеет смысл.

Мое отношение в Thread.php

public function posts() 
{ 
    return $this->hasMany('App\Forum\Post', 'thread_id', 'id'); 
} 

соотношение в Post.php

public function thread() 
{ 
    return $this->belongsTo('App\Forum\Thread', 'thread_id', 'id'); 
} 

Мой код, чтобы упорядочить темы:

$threads = Thread::all(); 

Он просто отображает темы, в порядке его ID. Пожалуйста помоги. Любая помощь высоко ценится.

ответ

1

Попробуйте это:

public function posts() 
{ 
    return $this->hasMany('App\Forum\Post', 'thread_id', 'id')->orderBy('created_at', 'desc'); 
} 

Редактировать

На самом деле, при дальнейшем чтении вашего вопроса, то, что я думаю, что вы после этого:

protected $touches = array('threads'); 

Включите эту строку в сообщении модели. Это обновит временные метки соответствующих моделей. Затем вы можете сортировать свои потоки по столбцу updated_at.

+0

Вместо 'protected $ touchhes' в модальном, я пошел с' $ thread-> touch() 'в моем контроллере при создании нового сообщения. Спасибо! –

0
$threads = Thread::latest('updated_at')->take(5)->get() 

Замените поле 'updated_at' любым полем, которое вы хотите использовать для проверки новейших потоков. Измените «5» на то, сколько вы хотите захватить. или используйте paginate().

+0

Но столбец 'updated_at' потока не обновляется при создании сообщения. –

+0

Эй, извините. Вчера вечером я подписал свой последний комментарий. Поскольку у вас уже есть модель сообщений, просто попробуйте это. '$ threads = Post :: thread() -> latest ('updated_at') -> take (5) -> get()' – Landjea

0

Это должно работать на один-ко-многим:

$posts = Post::orderBy('created_at', 'desc')->take(10)->get(); 

В свете:

@foreach ($posts as $post) 
    {{ $post->thread->title }} 
@endforeach 
Смежные вопросы