【问题标题】:Laravel OrderBy RandomLaravel 随机排序
【发布时间】:2016-11-11 15:43:01
【问题描述】:

作为 Laravel 的新手,我正在尝试随机显示画廊的图像。在 routes.php 中,我目前有这个代码:

// Get galleries
$galleries = App\Gallery::orderBy('id', 'DESC')->get();

你有什么想法让它发挥作用吗?

谢谢

【问题讨论】:

    标签: laravel sql-order-by


    【解决方案1】:

    对于 Laravel >= 5.2,您可以使用 inRandomOrder() 方法。

    说明:inRandomOrder()方法可用于对查询结果进行随机排序。例如,您可以使用此方法获取随机用户:

    示例:

    $galleries = App\Gallery::inRandomOrder()->get();
    //Or
    DB::table('gallery')->inRandomOrder()->get();
    

    对于 >= 5.0 的其他版本,您可以使用 random() 方法。

    说明:random() 方法从集合中返回一个随机项。

    示例:

    App\Gallery::all()->random()->get();
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。此解决方案给出错误:BadMethodCallException in Builder.php line 2161: Call to undefined method Illuminate\Database\Query\Builder::inRandomOrder()
    • 似乎 inRandomOrder 是问题所在。我仍然有同样的错误。
    • 它适用于 >= laravel 5.2.. 检查你的 laravel 版本
    • Course::inRandomOrder()->take(20)->get();没用。 - Find.php 第 219 行中的错误排序规范也是 Course::all()->random()->get();获取记录但顺序相同,没有区别。我是不是错过了什么。 - Laravel 5.6 版
    • 调用未定义的方法 Illuminate\\Database\\Eloquent\\Builder::random()
    【解决方案2】:

    你可以试试:

    $galleries = App\Gallery::orderByRaw('RAND()')->get()
    

    【讨论】:

    • 感谢您的回答,此解决方案没有任何改变,我仍然得到 orderby ID 的结果
    • 您是在运行上面提供的确切查询还是要添加更多查询?
    • 我只是添加;最后
    • 不要在查询中添加任何其他内容,只需尝试上面提供的确切查询。我自己测试过,它工作正常。
    【解决方案3】:

    如果你想对已经检索到的集合进行随机排序,你可以使用类似这样的方法

    $result = $result->sortBy(function($item){
       return rand();
    });
    

    【讨论】:

      猜你喜欢
      • 2012-12-04
      • 2012-11-19
      • 2012-03-16
      • 2012-01-05
      • 2015-10-09
      • 2015-03-04
      • 2014-07-21
      • 2014-04-06
      • 2013-01-29
      相关资源
      最近更新 更多