Laravel - 来自线程表的posts表中的ordered_at日期

时间:2016-03-15 01:41:28

标签: php mysql laravel

我有一个帖子和帖子表。我的关系是:posts.thread_id = threads.id

我正在尝试使用包含许多帖子的主题创建一个论坛。我想在帖子的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的顺序显示线程。请帮忙。任何帮助都非常感谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

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

修改

实际上,在进一步阅读你的问题后,我认为你所追求的是:

 protected $touches = array('threads');

在Post模型中包含此行。这将更新相关模型的时间戳。然后,您可以通过updated_at列对线程进行排序。

答案 1 :(得分:0)

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

将“updated_at”字段替换为您要用于检查最新线程的字段。将“5”更改为您想要抓取的数量。或使用paginate()。

答案 2 :(得分:0)

这适用于一对多关系:

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

在视图中:

@foreach ($posts as $post)
    {{ $post->thread->title }}
@endforeach