【问题标题】:Laravel exclude voted postsLaravel 排除投票的帖子
【发布时间】:2017-03-25 04:00:07
【问题描述】:

我有两个表:postsvotes,我想在主页上只显示一个帖子,然后以随机顺序显示它们。但我想排除已经投票的帖子。所以我只想在未投票的帖子之间循环。我正在使用 Laravel 5.4

posts 表的结构:

  • id

  • user_id

  • ...

votes 表的结构:

  • id

  • user_id

  • post_id

  • ...

我只需要一个查询来排除帖子,以及我已经写过的所有其他内容。

谢谢

【问题讨论】:

    标签: php mysql laravel-5 eloquent laravel-5.4


    【解决方案1】:

    假设您的 Post 模型中有 votes 关系(我假设您使用 Eloquent),您可以使用:

    $posts = Post::doesntHave('votes')->get();
    

    获取没有投票的帖子。

    显然,在这里运行get() 可能不是一个好主意,因为您将获得所有没有投票的帖子 - 如果有 100 000 个帖子符合此条件怎么办?您可能应该只获取其中一些,然后随机选择一个,例如:

    $posts = Post::doesntHave('votes')->latest()->take(100)->get();
    

    【讨论】:

    • 不错的+1。但是如果投票确实有赞成票和反对票,我只想过滤赞成票。
    • @LearnCss 如果您使用查询构建器,您应该使用连接或嵌套查询来实现相同的目的。但在大多数情况下使用 Eloquent 更合理:)
    • @MarcinNabiałek 是的,但是如果我想按票数排序呢?
    • @LearnCss 但是你写了“但我想排除已经被投票的帖子。”所以这些帖子都不会有任何投票,所以没有必要按投票排序,因为他们都有 0 票
    • @MarcinNabiałek 是的,但是当前用户。但是,如果有 5000 名其他用户支持这篇文章怎么办?我想先显示最受好评的人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2014-08-15
    相关资源
    最近更新 更多