为什么我不能在Laravel Eloquent数据透视表中订购?

时间:2019-01-26 03:56:45

标签: laravel eloquent

我正在整理主页上的posts表,以仅显示我亲自挑选的帖子。

当我为主页选择帖子时,其ID进入posts_homepage表,该表基本上是数据透视表。我从post_id中选择帖子的ID(posts_homepage),然后从posts表中获取帖子。

这很好用,但是,现在我想按特定的顺序放置它们,因此我在order_by中添加了posts_homepage字段。我很难弄清楚如何按照我想要的顺序获得结果,但是没有任何效果。我只是按照默认顺序来获取它们。

TABLE posts_homepage
post_id    INT 10 UNSIGNED
order_by INT 10 UNSIGNED

当前查询...

$posts = Post::latest('published_at')
    ->whereHas('user', function ($query) {
        $query->where('verified', 1);
    })
    ->whereRaw("posts.id IN (SELECT post_id FROM posts_homepage)")
    ->whereRaw("posts.status = 'published'")
    ->paginate(30);

我尝试删除latest('published_at')并插入->orderByRaw('ORDER BY posts_homepage.order_by ASC'),但这没什么不同,否则我会收到一条错误消息Unknown column 'posts_homepage.order_by' in 'order clause'

我也尝试了->whereRaw("posts.id IN (SELECT post_id FROM posts_homepage ORDER BY order_by ASC)"),但是那也不起作用。我也尝试了其他一些选项,但无法根据order_by字段返回它们

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果我输入错了,请更正我,但是在这里不能简单地进行连接吗?例如:

$posts = Post::select('posts.*')
    ->whereHas('user', function ($query) {
        $query->where('verified', 1);
    })
    ->join('posts_homepage', 'posts.id', 'posts_homepage.post_id')
    ->where('posts.status', 'published')
    ->orderBy('posts_homepage.order_by', 'ASC')
    ->paginate(30);