我有两个表帖子和 sharedposts 。 sharedposts表有“user_id”,“updated_at”和“post_id”列,其中帖子表有'id','title'和'body'。我知道链接两个表的关系。我想要做的就是从两个表中显示由'updated_at'排序的每个帖子。请帮助查询构建器和雄辩的方式。 Thanku
答案 0 :(得分:0)
代码未经过测试,但您可以尝试:
Post::whereHas('sharedpost',function($query){
$query->orderBy('updated_at');
})->get()
答案 1 :(得分:0)
如果不了解模型的大部分更新,可能会采用一种不同的方法?这样我认为阅读速度应该更快(如果我在这里错了,请有人纠正我)
通过创建新迁移和adding
,在表格中添加其他字段$table->timestamp('last_updated');
然后使用Events更新Post
或SharedPost
时更新字段,方法是将其添加到AppServiceProvider
:
public function boot()
{
Post::saving(function ($post) {
$post->last_updated = Carbon::now();
});
}
我不确定这是否会起作用,如果您回复了反馈,我会很感激,因为我现在懒得自己试试:)。更糟糕的情况可能需要将方法更改为:
public function boot()
{
SharedPost::saved(function ($sharedpost) {
$sharedpost->post->last_updated = Carbon::now();
$sharedpost->save();
});
}
如果您不想要AppServiceProvider
中的代码,也可以查看观察员。 Haven没有使用它,但似乎很简单。
然后你可以简单地Post::orderBy('last_updated')->get();
通过这种方式,您可以为数据库添加一两个输入,但我想(如果我错了,请大家指正)get()
应该更快。请记住,我远离MySQL专家。
最后,您可以使用Redis将此数据保存到缓存中,从而加快速度。