从laravel5中的多个表中获取数据

时间:2016-10-31 13:41:17

标签: laravel laravel-5 eloquent laravel-5.2 laravel-query-builder

我有两个表帖子 sharedposts 。 sharedposts表有“user_id”,“updated_at”和“post_id”列,其中帖子表有'id','title'和'body'。我知道链接两个表的关系。我想要做的就是从两个表中显示由'updated_at'排序的每个帖子。请帮助查询构建器和雄辩的方式。 Thanku

2 个答案:

答案 0 :(得分:0)

代码未经过测试,但您可以尝试:

Post::whereHas('sharedpost',function($query){
    $query->orderBy('updated_at');
})->get()

答案 1 :(得分:0)

如果不了解模型的大部分更新,可能会采用一种不同的方法?这样我认为阅读速度应该更快(如果我在这里错了,请有人纠正我)

通过创建新迁移和adding

,在表格中添加其他字段
$table->timestamp('last_updated');

然后使用Events更新PostSharedPost时更新字段,方法是将其添加到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将此数据保存到缓存中,从而加快速度。