【问题标题】:How to get random row from the last 5 row?如何从最后 5 行中获取随机行?
【发布时间】:2020-02-23 21:21:30
【问题描述】:

已编辑:从最旧的 5 个帖子中,我想从那些随机的帖子中获取一行。


如何从最旧的 5 行中获取随机行?

我在下面尝试了这些:

Post::oldest(5)->random()->first();

但是给我一个错误:

调用未定义的方法 Illumi nate\Database\Eloquent\Builder::random()

有人知道如何以最简单和最简洁的方式做到这一点吗?

【问题讨论】:

    标签: laravel eloquent laravel-6


    【解决方案1】:

    Builder 类没有random() 方法,但Collection 有。此外,oldest() 不采用整数作为参数,它正在寻找要使用的 column(默认使用 created_at)。

    请改用以下查询:

    $posts = Post::inRandomOrder()->limit(5)->get();
    

    注意:如果你想要多行,不要使用->first()->first() 返回数据库中的第一行,->get() 返回 Collection 中的行。

    编辑:误读了问题。请参阅下面的查询:

    $randomPost = Post::oldest()->limit(5)->get()->random();
    

    使用初始的Post::oldest()->limit(5)->get() 得到由created_at 排序的5 个Posts,然后使用Collection 逻辑通过random() 返回单个条目。

    【讨论】:

    • 只是好奇,如果你在->limit(5) 之后使用->inRandomOrder() 会发生什么?
    • limit(5)->inRandomOrder() 应与inRandomOrder()->limit(5) 相同;对于大多数 Builder 实例(Post::function() 的结果),定义顺序无关紧要,因为它会根据正在使用的数据库转换为正确的操作顺序
    • @TimLewis 我试过Post::oldest()->limit(5)->get()->random()->first();,但它只是返回同一行。我试了10次。还有..
    • @TimLewis Post::inRandomOrder()->limit(5)->get(); 我要求从最旧的 5 个帖子中随机抽取一行。嗯..我已经更新了我的问题。
    • 代码已更新(感谢@Remul)$randomPost = Post::oldest()->limit(5)->get()->random(); 应该可以工作,但我犯了一个错误;将->first() 添加到查询中会覆盖random() 并返回最旧的第一个。
    【解决方案2】:

    正如@Tim Lewis 所说,不要使用first,而是可以写take + 要显示的项目数

    return Post::inRandomOrder()->limit(5)->get()->take(1);
    //or
    return Post::oldest()->take(5)->get()->random();
    

    take 方法返回一个具有指定项数的新集合: 在这种情况下,我们只拿了一件,更多信息请访问docs 希望对你有帮助

    【讨论】:

    • 我已经知道take() 但不知道如何正确使用它。嗯,你忘了,它必须来自最古老的 5 个帖子。谢谢回复
    • return Post::oldest()->take(5)->get()->random(1);试试这个
    • 虽然这是正确的,但应该注意take()limit() 的别名,如果您只需要一个条目,random(1) 不需要参数。这意味着这个答案几乎完全是我的副本,这很好,但请尝试在答案中添加一些新内容。
    • @TimLewis 啊哈我要问你limittake 的区别。现在我再次感谢先生。
    • @gecko 不需要道歉;我们都从某个地方开始。坚持下去!
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2014-07-26
    • 2016-03-04
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多